Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

アナグラム部分文字列検索用のCプログラム


この問題では、サイズnのテキストとサイズmのパターンの2つの文字列が与えられます。私たちの仕事は、アナグラムの部分文字列検索用のプログラムを作成することです。

ここでは、テキスト内のすべてのパターンの出現とそのすべての順列(アナグラム)を見つける必要があります。

問題を理解するために例を見てみましょう

入力

text = “xyztrwqyzxfg” pattern = “xyz”

出力

Found at index 0
Found at index 7

この問題を解決するには、ラビンカープアルゴリズムと同様のアルゴリズムを使用する必要があります。 これは、数値を法としてすべての文字のASCII値を加算することにより、アナグラムの出現をチェックするために使用されます。次に、特性セットのウィンドウを使用して、合計を照合します。

このソリューションでは、テキストのウィンドウ内の文字の頻度と一致するパターンを格納する2つの配列が必要になります。次に、ウィンドウを1つずつスライドさせて、各未亡人の文字頻度を一致させ、一致するパターンを印刷します。

アナグラム部分文字列検索のプログラム

//アナグラム部分文字列検索のプログラム

#include <cstring>
#include <iostream>
#define MAX 256
using namespace std;
bool matchPattern(char arr1[], char arr2[]){
   for (int i = 0; i < MAX; i++)
   if (arr1[i] != arr2[i])
      return false;
   return true;
}
void anagramSearch(char* pattern, char* text){
   int M = strlen(pattern);
   int N = strlen(text);
   char patternArray[MAX] = { 0 }, textArray[MAX] = { 0 };
   for (int i = 0; i < M; i++) {
      (patternArray[pattern[i]])++;
      (textArray[text[i]])++;
   }
   for (int i = M; i < N; i++) {
      if (matchPattern(patternArray, textArray))
         printf("\nPattern found at index value : %d", (i-M));
      (textArray[text[i]])++;
      textArray[text[i - M]]--;
   }
   if (matchPattern(patternArray, textArray))
   printf("\nPattern found at index value: %d", (N-M));
}
int main() {
   char text[] = "xyztrwqyzxfg";
   char pattern[] = "xyz";
   printf("Searching Anagram pattern in the string ");
   anagramSearch(pattern, text);
   return 0;
}

出力

Searching Anagram pattern in the string
Pattern found at index value: 0
Pattern found at index value: 7

  1. アナグラム部分文字列検索用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −テキストとパターンが与えられた場合、パターンのすべての出現とその順列(またはアナグラム)をテキストで印刷する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # maximum value MAX = 300 # compare def compare(arr1, arr2):    for i in range(MAX):       if arr1[i] != arr2[i]:       &nbs

  2. 線形探索のためのPythonプログラム

    この記事では、線形検索とPython3.xでの実装について学習します。またはそれ以前。 アルゴリズム Start from the leftmost element of given arr[] and one by one compare element x with each element of arr[] If x matches with any of the element, return the index value. If x doesn’t match with any of elements in arr[] , return -1 or element no