回文字符串
字符串正序读的结果与倒序读的结果一样,例如“上海自来水来自海上”
两种判定方法
- 数组指针
- 递归
数组指针:移动头指针与尾指针进行元素比较
var s = '上海自来水来自海上';
var len = s.length;
var mid = len % 2 ? len / 2 - 1 : len / 2; // 字符串长度为奇、偶数时的比较次数
var flag = true;
for (let i = 0; i < mid; i++) {
let head = s[i];
let tail = s[len - i - 1];
if (head !== tail) {
flag = false;
break;
}
}
console.log(flag);
递归:每次比较头、尾对应的元素
var s = '上海自来水来自海上';
function f(s, head, tail) {
if (head + 1 > tail + 1) { // 递归结束条件:头指针下标 > 尾指针下标
return s[head] === s[tail]; // 递归结束时,判断最后两个元素是否相等
}
if (s[head] === s[tail]) {
return f(s, head + 1, tail - 1);
}
else {
return false;
}
}
var flag = f(s, 0, s.length - 1);
console.log(flag);