判断回文字符串
实现函数判断字符串是否为回文
问题
实现一个函数,判断输入的字符串是否为回文。回文字符串是指正读和反读都相同的字符串,例如 “level”、“noon”。
解答
方法一:反转字符串比较
function isPalindrome(input) {
if (typeof input !== 'string') return false;
return input.split('').reverse().join('') === input;
}
将字符串转为数组,反转后再拼接,与原字符串比较。
方法二:双指针
function isPalindrome(input) {
if (typeof input !== 'string') return false;
let i = 0, j = input.length - 1;
while (i < j) {
if (input.charAt(i) !== input.charAt(j)) return false;
i++;
j--;
}
return true;
}
使用双指针从两端向中间遍历,逐个字符比较。
关键点
- 方法一简洁直观,但需要创建新数组和字符串,空间复杂度 O(n)
- 方法二使用双指针,空间复杂度 O(1),性能更优
- 两种方法时间复杂度都是 O(n)
- 需要先判断输入类型,确保是字符串
目录