调试回文字符串判断代码:while循环致浏览器崩溃求助
回文字符串判断代码调试方案
核心问题分析
你的代码会导致浏览器崩溃,以及逻辑判断错误,主要有以下几个问题:
- 死循环触发崩溃:
left + 1和right - 1仅做了数值计算,没有将结果赋值回变量,导致left和right的位置永远不变。如果输入字符串首尾字符相等,while循环会无限执行,直接引发浏览器崩溃。必须改为赋值操作:left += 1(或left++)、right -= 1(或right--)。 - 循环条件逻辑错误:原循环条件
string[left] === string[right]会导致「首尾字符不等的非回文字符串」直接返回true(因为循环根本不会执行),比如输入"abc"会被误判为回文。正确的循环条件应该是left < right,只要左指针未超过右指针,就继续比对。 - 中间值判断冗余且失效:提前计算的
middle仅对应初始状态的中间位置,指针移动后该值失去意义;且left === middle && right === middle仅适用于奇数长度字符串,偶数长度字符串永远无法触发该退出条件,导致循环无法正常终止。用left < right作为循环条件,可自动在指针相遇时终止循环,无需额外判断。
修复后的代码
function isPalindrome(string) { let left = 0; let right = string.length - 1; while (left < right) { if (string[left] !== string[right]) { return false; } left++; right--; } return true; }
代码说明
- 直接在比对到不等字符时返回
false,无需额外维护状态变量,逻辑更简洁 - 循环条件
left < right确保所有对称位置的字符都能被比对到,自动处理奇偶长度的字符串
内容的提问来源于stack exchange,提问作者Antonio Pavicevac-Ortiz
相关产品推荐
相关产品推荐

