C++如何在检查Anagram时忽略上下差异?
C++ How to ignore the difference between upper and lower when checking Anagram?
bool isAnagram(string s1, string s2){
if(s1.length() != s2.length())
return false;
for(int i =0; i <s1.length();i++){
int pos = (s2.find(s1[i]);
if(pos<0)
return false;
s2.erase(pos,1);
}
return true;
return false;
}
我写了检查Anagram的代码,但忽略了忽略上下差异的要求。我对此一无所知。你能帮助我吗?谢谢!
在比较之前将两者都转换为小写
std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
简单的方法是将两个字符串都设置为小写(或大写),然后对它们进行排序。如果 s1
和 s2
互为变位词,则结果应该相同。
您可以使用算法库将大写转换为小写。
在循环之前添加下面一行以将其转换为小写。
#include <algorithm>
#include <string>
std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
您可以简单地使用 STL 的强大功能 algorithm
:
#include <iostream>
#include <algorithm>
using namespace std;
bool isSameChar(int a, int b)
{
return tolower(a) == tolower(b);
}
bool isAnagram(const string& a, const string& b)
{
return a.size() == b.size()
&& is_permutation(a.begin(), a.end(), b.begin(), isSameChar);
}
int main()
{
cout << isAnagram("AbcDE", "ebCda") << endl; // true
cout << isAnagram("AbcDE", "ebCdaa") << endl; // false
cout << isAnagram("AbcDE", "ebCde") << endl; // false
return 0;
}
bool isAnagram(string s1, string s2){
if(s1.length() != s2.length())
return false;
for(int i =0; i <s1.length();i++){
int pos = (s2.find(s1[i]);
if(pos<0)
return false;
s2.erase(pos,1);
}
return true;
return false;
}
我写了检查Anagram的代码,但忽略了忽略上下差异的要求。我对此一无所知。你能帮助我吗?谢谢!
在比较之前将两者都转换为小写
std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
简单的方法是将两个字符串都设置为小写(或大写),然后对它们进行排序。如果 s1
和 s2
互为变位词,则结果应该相同。
您可以使用算法库将大写转换为小写。 在循环之前添加下面一行以将其转换为小写。
#include <algorithm>
#include <string>
std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
您可以简单地使用 STL 的强大功能 algorithm
:
#include <iostream>
#include <algorithm>
using namespace std;
bool isSameChar(int a, int b)
{
return tolower(a) == tolower(b);
}
bool isAnagram(const string& a, const string& b)
{
return a.size() == b.size()
&& is_permutation(a.begin(), a.end(), b.begin(), isSameChar);
}
int main()
{
cout << isAnagram("AbcDE", "ebCda") << endl; // true
cout << isAnagram("AbcDE", "ebCdaa") << endl; // false
cout << isAnagram("AbcDE", "ebCde") << endl; // false
return 0;
}