我编写了一个函数来确定字符串a是否为字符串b的排列.定义如下:
bool isPermutation(std::string a, std::string b){
if(a.length() != b.length())
return false;
int a_sum, b_sum;
a_sum = b_sum = 0;
for(int i = 0; i < a.length(); ++i){
a_sum += a.at(i);
b_sum += b.at(i);
}
return a_sum == b_sum;
}
我的方法的问题是,如果a = 600000和b = 111111,则该函数返回true.
有什么办法可以保持我对这个问题的一般方法(而不是对字符串进行排序然后再执行strcmp)并保持正确性?
解决方法:
您可以分别计算字符:
bool isPermutation(std::string a, std::string b)
{
if(a.length() != b.length())
return false;
assert(a.length() <= INT_MAX);
assert(b.length() <= INT_MAX);
int counts[256] = {};
for (unsigned char ch : a)
++counts[ch];
for (unsigned char ch : b)
--counts[ch];
for (int count : counts)
if (count)
return false;
return true;
}