📜  Anagram子串搜索(或搜索所有排列)的C程序(1)

📅  最后修改于: 2023-12-03 14:39:06.743000             🧑  作者: Mango

Anagram Substring Search (或搜索所有排列)的C程序

Anagram是指由相同的字母组成,但是顺序不同的单词或短语。 在这个C程序中,我们将搜索给定字符串中的所有Anagram子字符串。

算法

首先,我们需要计算模式字符串(Anagram)的词频表。 然后,我们使用滑动窗口技术将窗口从左到右移动,并比较窗口中的词频表是否与模式字符串的词频表相同。 如果相同,则窗口中的子字符串为Anagram。

该算法的时间复杂度为O(nm),其中n是主字符串的长度,m是模式字符串的长度。

代码

以下是搜索所有Anagram子字符串的C程序代码:

#include <stdio.h>
#include <string.h>

#define MAX_CHAR 256

void searchAnagrams(char *pattern, char *text) {
    int patternCount[MAX_CHAR] = {0}, textCount[MAX_CHAR] = {0};

    int patternLength = strlen(pattern), textLength = strlen(text);

    for (int i = 0; i < patternLength; i++) {
        patternCount[pattern[i]]++;
        textCount[text[i]]++;
    }

    for (int i = patternLength; i < textLength; i++) {
        if (memcmp(patternCount, textCount, sizeof(patternCount)) == 0) {
            printf("Anagram found at index %d\n", i - patternLength);
        }
        textCount[text[i]]++;
        textCount[text[i - patternLength]]--;
    }

    if (memcmp(patternCount, textCount, sizeof(patternCount)) == 0) {
        printf("Anagram found at index %d\n", textLength - patternLength);
    }
}

int main() {
    char text[] = "BACDGABCDA";
    char pattern[] = "ABCD";
    printf("Text : %s\n", text);
    printf("Pattern : %s\n", pattern);
    searchAnagrams(pattern, text);
    return 0;
}

在这里,我们使用了searchAnagrams函数来搜索Anagram子字符串。该函数接受模式字符串和文本字符串作为输入,并打印所有Anagram子字符串的索引。我们还使用了patternCounttextCount数组来计算频率表。我们还在滑动窗口中更新文本计数器。

结论

这是一个C程序来搜索给定字符串中的所有Anagram子字符串。 该程序的时间复杂度为O(nm),具有实际应用价值。