【发布时间】:2023-03-21 15:36:01
【问题描述】:
我编写了一个函数来确定字符串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)并保持正确性?
【问题讨论】:
-
如何将字符串中的字符相加?不应该使用 static_cast 或其他东西将它们转换为 int 吗?也许 atoi()?
-
@MikeNickaloff 感谢您的评论。我将字符的 ASCII 值加在一起,而 C++ 不需要我显式地转换它。我希望我的
a = 600000和b = 111111示例不会让您失望,我说的也是它们的 ASCII 值,而不是它们的整数值! -
@ishyfishy 好吧,我删除了我的答案,因为它在那种情况下并不适用。
-
@MikeNickaloff 问题不在于 OP 在字符串中添加了字符。问题是算法是错误的。计算两个范围内的值的总和绝不会检查一个范围是否是另一个范围的排列。
-
我想知道如果字符串包含 UTF-8 字符,这个问题的所有答案是否都不会失败。
标签: c++ c++11 permutation