递归实现回文字符串判断函数无返回值默认false问题排查
问题分析与修复
你的递归回文判断函数出错的核心原因是误用了C++中string::substr的参数规则:
C++的substr函数第二个参数是要截取的字符长度,不是结束位置。你当前写的substr(1, some_string.length() - 1),会从索引1开始,截取原长度-1个字符——这会把原字符串的最后一个字符也包含进去,导致递归处理的子串不符合预期,最终逻辑错误。
比如输入回文字符串"aba":
- 原长度是3,
substr(1, 3-1)会截取从索引1开始的2个字符,得到"ba" - 递归判断
"ba"时,首尾字符'b'和'a'不等,直接返回false,但实际"aba"是回文,这就导致了错误结果。
修复后的代码
只需要把substr的第二个参数改成some_string.length() - 2,就能准确截取去掉首尾字符后的子串:
bool isPalindrome(string some_string) { if (some_string.length() == 0 || some_string.length() == 1) { return true; } if (some_string[0] == some_string[some_string.length() - 1]) { // 从索引1开始,截取长度为原长度-2的子串(去掉首尾) return isPalindrome(some_string.substr(1, some_string.length() - 2)); } else { return false; } }
额外优化建议
- 传递字符串的
const引用,避免每次递归都拷贝字符串,提升性能:bool isPalindrome(const string& some_string) { // 函数逻辑不变 }
内容的提问来源于stack exchange,提问作者Huzaifa Siddiqui
相关产品推荐
相关产品推荐

