📌  相关文章
📜  C++ 程序检查两个字符串是否互为 Anagram(1)

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

C++程序检查两个字符串是否互为 Anagram

Anagram是指两个字符串中的字符种类和数量都相同,但是排列顺序不同。例如,"listen"和"silent"就是一对Anagram。

在C++中,检查两个字符串是否互为Anagram可以使用计数排序的方法。

首先,需要创建一个长度为26的整型数组count,用于存储每个字母出现的次数。然后,遍历第一个字符串,将每个字符出现的次数计入count数组中。接着,遍历第二个字符串,将每个字符出现的次数从count数组中减去。最后,检查count数组中的每个元素是否均为0,是则说明两个字符串互为Anagram,否则不是。

下面是C++实现的代码片段:

bool checkAnagram(string s1, string s2) {
    if(s1.length() != s2.length()) {
        return false;
    }
    int count[26] = {0};
    for(int i = 0; i < s1.length(); i++) {
        count[s1[i] - 'a']++;
    }
    for(int i = 0; i < s2.length(); i++) {
        count[s2[i] - 'a']--;
    }
    for(int i = 0; i < 26; i++) {
        if(count[i] != 0) {
            return false;
        }
    }
    return true;
}

在该代码中,checkAnagram函数接受两个字符串s1和s2作为参数,分别表示待检查的两个字符串。首先,该函数检查两个字符串的长度是否相等,若不相等则必定不互为Anagram,返回false。若长度相等,则创建一个长度为26的整型数组count,并将其每个元素初始化为0。然后,遍历第一个字符串s1中的每个字符,将每个字符出现的次数计入count数组中。接着,遍历第二个字符串s2中的每个字符,将每个字符出现的次数从count数组中减去。最后,再遍历一次count数组中的每个元素,若存在不为0的元素,则说明两个字符串不互为Anagram,返回false。若count数组中的每个元素均为0,则说明两个字符串互为Anagram,返回true。

在实际应用中,需要注意字符串中的字母是否均为小写字母,并进行相应的处理。此外,该方法的时间复杂度为O(n),其中n为字符串的长度。