js回文算法实现
回文算法实现
回文是指正读和反读都相同的字符串或数字。以下是几种在JavaScript中实现回文检测的方法。
方法1:使用字符串反转
将字符串反转后与原字符串比较,如果相同则为回文。

function isPalindrome(str) {
const reversedStr = str.split('').reverse().join('');
return str === reversedStr;
}
// 示例
console.log(isPalindrome('madam')); // true
console.log(isPalindrome('hello')); // false
方法2:使用循环比较字符
通过循环比较字符串的首尾字符,逐步向中间靠拢。
function isPalindrome(str) {
const len = str.length;
for (let i = 0; i < len / 2; i++) {
if (str[i] !== str[len - 1 - i]) {
return false;
}
}
return true;
}
// 示例
console.log(isPalindrome('racecar')); // true
console.log(isPalindrome('world')); // false
方法3:使用递归
递归地比较字符串的首尾字符,直到字符串长度为1或0。

function isPalindrome(str) {
if (str.length <= 1) return true;
if (str[0] !== str[str.length - 1]) return false;
return isPalindrome(str.slice(1, -1));
}
// 示例
console.log(isPalindrome('level')); // true
console.log(isPalindrome('apple')); // false
方法4:忽略大小写和非字母字符
处理包含大小写和非字母字符的字符串时,可以先将字符串转换为统一格式。
function isPalindrome(str) {
const cleanedStr = str.toLowerCase().replace(/[^a-z0-9]/g, '');
const reversedStr = cleanedStr.split('').reverse().join('');
return cleanedStr === reversedStr;
}
// 示例
console.log(isPalindrome('A man, a plan, a canal: Panama')); // true
console.log(isPalindrome('No lemon, no melon')); // true
方法5:数字回文检测
检测数字是否为回文,可以将其转换为字符串后使用上述方法,或直接通过数学运算实现。
function isPalindromeNumber(num) {
if (num < 0) return false;
let original = num;
let reversed = 0;
while (num > 0) {
reversed = reversed * 10 + (num % 10);
num = Math.floor(num / 10);
}
return original === reversed;
}
// 示例
console.log(isPalindromeNumber(121)); // true
console.log(isPalindromeNumber(123)); // false
注意事项
- 字符串方法适用于任意字符组成的字符串,但可能需要处理大小写和特殊字符。
- 数字方法直接操作数字,避免转换为字符串的开销。
- 递归方法简洁但可能因调用栈过深导致性能问题,适合短字符串。






