判断回文字符串

实现函数判断字符串是否为回文

问题

实现一个函数,判断输入的字符串是否为回文。回文字符串是指正读和反读都相同的字符串,例如 “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)
  • 需要先判断输入类型,确保是字符串