LeetCode回文检查器(Palindrome checker)代码逻辑错误排查求助
LeetCode回文检查器代码问题排查
你的C++回文检查代码在VS Code无输出、LeetCode仅通过2/3测试用例,核心问题不止bool逻辑,还有多处严重错误,具体如下:
原代码
class Solution { public: bool isPalindrome(string s) { getline(cin,s); bool answer; vector<int>l; vector<int>r; for(auto i=0;i<s.size();i++){ char c = s[i]; l.push_back(c); } for(auto i=s.size()-1;i<s.size();i--){ char a = s[i]; r.push_back(a); } for(auto i=0;i++;) if(l[i]==r[i]) answer = true; if(l[i]!=r[i]) answer = false; } return answer; } };
问题分析
- 非法覆盖输入参数:LeetCode通过函数参数
s传入待检查字符串,你手动调用getline(cin,s)会覆盖原有参数值,导致输入逻辑混乱,这也是VS Code无输出的原因——程序在等待手动输入,但题目不需要此操作。 - 反转循环死循环:第二个
for循环for(auto i=s.size()-1;i<s.size();i--)中,s.size()是无符号类型size_t,当i从0减1时会变成极大的无符号数,永远满足i<s.size(),导致死循环,r向量会被无限填充,程序直接崩溃或逻辑完全错误。 - 回文检查循环逻辑彻底错误:最后一个
for循环for(auto i=0;i++;)是死循环,且两个if语句未用大括号包裹,只有第一个if属于循环体。更关键的是,你的逻辑是“当前字符相等就设answer为true,不等就设为false”,最终结果只取决于最后一对字符的比较,完全不符合回文“所有对称字符都相等”的要求。 - bool变量未初始化:
bool answer;没有初始值,如果字符串为空或者循环未执行,返回的是随机内存值,结果不可控。
修正后的代码(双指针法,高效简洁)
class Solution { public: bool isPalindrome(string s) { // 过滤并标准化字符串:仅保留字母数字,统一转小写 string processed; for (char c : s) { if (isalnum(static_cast<unsigned char>(c))) { processed += tolower(static_cast<unsigned char>(c)); } } // 双指针从两端向中间检查 int left = 0; int right = processed.size() - 1; while (left < right) { if (processed[left] != processed[right]) { return false; // 只要一对字符不等,直接返回false } left++; right--; } return true; // 所有对称字符都相等,返回true } };
内容的提问来源于stack exchange,提问作者Mrigraj Yadav
相关产品推荐
相关产品推荐

