在 C++ 中使用 unordered_map 检查两个字符串是否是彼此的字谜
编写一个函数来检查两个给定的字符串是否是彼此的Anagram 。
一个字符串的变位词是另一个包含相同字符的字符串,只是字符的顺序可以不同。
For example, “abcd” and “dabc” are an Anagram of each other.
方法:无序映射也可用于查找任何两个给定字符串是否为字谜。想法是将第一个字符串的每个字符存储在映射中,以其频率为值,然后检查映射中第二个字符串的每个字符,如果在映射中找到该字符,则降低其频率值从地图上。如果一个字符的频率变为0,则将其从映射中删除,最后如果映射为空,则表示第一个字符串的所有字符都存在于第二个字符串中,并且出现次数相同(每个字符的频率) .
执行:
// C++ program to check whether
// two strings are anagrams of
// each other or not, using Hashmap
#include
#include
using namespace std;
// Function to check whether two strings
// are an anagram of each other
bool isanagram(string s1, string s2)
{
int l1 = s1.length();
int l2 = s2.length();
unordered_map m;
if (l1 != l2) {
return false;
}
for (int i = 0; i < l1; i++) {
m[s1[i]]++;
}
for (int i = 0; i < l2; i++) {
if (m.find(s2[i]) == m.end()) {
return false;
}
else {
m[s2[i]]--;
if (m[s2[i]] == 0) {
m.erase(s2[i]);
}
}
}
return m.size() == 0;
}
// Test function
void test(string str1, string str2)
{
cout << "Strings to be checked:\n"
<< str1 << "\n"
<< str2 << "\n";
if (isanagram(str1, str2)) {
cout << "The two strings are"
<< "anagram of each other\n";
}
else {
cout << "The two strings are not"
<< " anagram of each other\n";
}
cout << endl;
}
// Driver program
int main()
{
// Get the Strings
string str1 = "geeksforgeeks";
string str2 = "forgeeksgeeks";
// Test the Strings
test(str1, str2);
// Get the Strings
str1 = "geeksforgeeks";
str2 = "geeks";
// Test the Strings
test(str1, str2);
return 0;
}
输出:
Strings to be checked:
geeksforgeeks
forgeeksgeeks
The two strings areanagram of each other
Strings to be checked:
geeksforgeeks
geeks
The two strings are not anagram of each other
相关文章:
- 检查两个字符串是否是彼此的字谜
- 在Java中使用HashMap检查两个字符串是否是彼此的Anagram