📅  最后修改于: 2023-12-03 15:23:07.409000             🧑  作者: Mango
“字谜”是指由相同字母组成的两个单词,例如“listen”和“silent”。本文将介绍如何使用 C++ 的 unordered_map 来判断两个字符串是否是彼此的字谜。
#include <iostream>
#include <string>
#include <unordered_map>
bool isAnagram(std::string s, std::string t) {
std::unordered_map<char, int> sMap, tMap;
// 统计 s 中每个字符的出现次数
for (char c : s) {
if (sMap.find(c) != sMap.end()) {
sMap[c]++;
} else {
sMap[c] = 1;
}
}
// 统计 t 中每个字符的出现次数
for (char c : t) {
if (tMap.find(c) != tMap.end()) {
tMap[c]++;
} else {
tMap[c] = 1;
}
}
// 判断两个计数表是否相同
return sMap == tMap;
}
int main() {
std::string s = "listen";
std::string t = "silent";
if (isAnagram(s, t)) {
std::cout << "They are anagrams!" << std::endl;
} else {
std::cout << "They are not anagrams!" << std::endl;
}
return 0;
}
上述代码定义了一个 isAnagram
函数来判断两个字符串是否是彼此的字谜。在函数内部,使用 unordered_map 来统计两个字符串中每个字符的出现次数,然后判断这两个计数表是否相同。
在 main 函数中,调用 isAnagram
函数来判断 s
和 t
是否是彼此的字谜,并输出相应信息。
在上述代码中,我们使用了 std::unordered_map
容器来实现字符映射的统计。使用 unordered_map 的好处是可以在平均 O(1) 的时间内完成查找、插入、删除等操作,因此非常适合用来解决需要进行快速键值对查找的问题。