代码
function palindrome(str) {
// 排除干扰项
str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
// 设置边界条件
if (str.length < 2) {
return true;
}
// 检测首尾是否相等不相等,如果不等就直接返回 false
if (str[0] !== str[str.length - 1]) {
return false;
}
// 递归调用
return palindrome(str.slice(1, -1));
}
解释
- 整体思路是,递归地判断字符串的首尾是否相等
- 如果相等,就排除掉首尾字符,继续判断首尾是否相等,注意在最后的 return 那里,传入参数的改变
- 边界条件(跳出条件) 只需要设置为 str.length < 2,因为当 length 为 0 或者 1 的时候就表示这个字符是回文字符串
- 最后的递归调用,可以用 else 包起来,但其实没有必要。可以这样去理解,一旦前面的判断生效了,就会直接跳出,也就不会执行到这里因为。既然能执行到这一步,就表示前面的 if 判断都没有生效。
网友评论