力扣里做第20题“有效括号”,我输入这个代码在遇到 '{[]}' 的时候会错误地返回 false:
var isValid = function(s) {
if(s.length % 2 !== 0){
return false;
}
for (let i = 0; i < s.length / 2; i++) {
s = s.replace("()", "");
s = s.replace("{}", "");
s = s.replace("[]", "");
}
return s.length === 0;
};
而这个代码就会返回true:
var isValid = function(s) {
if(s.length % 2 !== 0){
return false;
}
let length = s.length / 2;
for (let i = 0; i < length; i++) {
s = s.replace("()", "");
s = s.replace("{}", "");
s = s.replace("[]", "");
}
return s.length === 0;
};
理论上说停止循环的数值是一样的,可最终结果却不一样,这是为什么呢?
因为你 replace 本身会改变 s.length
两者不等价。
第一个因为for循环中s的值一直在变,而s.length是在循环中获取的,也是一直变的,而第二个中length是固定的,因此循环的次数是固定的,不受s的变化而改变
停止循环使用break;啊
for (var i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
}