给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
自己解--金典法1
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size())
return false;
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
for(int i = 0;i < s1.size();i++)
{
if(s1[i] != s2[i])
return false;
}
return true;
}
金典解
问清是否考虑大小写,考虑空白字符。

image.png
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size())
return false;
int acs[256] = {0};
for(int i = 0;i < s1.size();i++)
{
int val = static_cast<int>(s1[i]);
acs[val]++;
}
for(int i = 0;i < s2.size();i++)
{
int val = static_cast<int>(s2[i]);
if(--acs[val] < 0)
return false;
}
return true;
}
//或
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size())
return false;
int acs[256] = {0};
for(int i = 0;i < s1.size();i++)
{
acs[s1[i]]++;
}
for(int i = 0;i < s2.size();i++)
{
if(--acs[s2[i]] < 0)
return false;
}
return true;
}