javascript - 通过反转子串找到最长的回文

标签 javascript algorithm

我正在尝试找到最长的回文。我有两个指针从字符串的第一个字母开始。对于外循环中的每个字母,我遍历内循环中的所有其他字母,并使用作为起始字母(外循环)和结束字母(内循环)之间的差异的子字符串。我反转这个子字符串并检查反转版本是否与原始版本相同。这样,我知道我找到了一个回文。该算法适用于我的大多数测试用例,只有一个除外,我不明白为什么。

function longestPalindrome (str) {
  const string = str.toLowerCase();
  if (str.length < 2) return null;
  let palindrome = '';

  function stringReverser (start, end) {
    const reversed = string.substr(start, end).split('').reverse().join('');
    return reversed;
  }

  for (let i = 0; i <= string.length; i++) {
    for (let j = i; j <= string.length; j++) {
      if (string.substr(i, j) === stringReverser(i, j)) {
        if (string.substr(i,j).length > palindrome.length) {
          palindrome = string.substr(i,j);
        }
      }
    }
  }

  if (!palindrome) return null;
  return palindrome;
}

let result1 = longestPalindrome('My mom is called annnna')
let result2 = longestPalindrome('My dad is a racecar athelete')
let result3 = longestPalindrome('That trip with a kayak was quite an adventure!')

console.log(result1)
console.log(result2)
console.log(result3)// should return ' kayak ' but returns 't t' instead.

最佳答案

我建议抽象出选定的子字符串,并使用 isPalendrome 函数:

function longestPalindrome (str) {
  const inputString = str.toLowerCase();
  if (str.length < 2) return null;
  let longestPalindrome = '';

  function isPalendrome(strParam) {
    return strParam === strParam.split('').reverse().join('');
  }

  for (let i = 0; i <= inputString.length; i++) {
    for (let j = i; j <= inputString.length; j++) {
      const thisStr = inputString.slice(i, j);
      if (!isPalendrome(thisStr)) continue;
      if (thisStr.length > longestPalindrome.length) longestPalindrome = thisStr;
    }
  }
  return longestPalindrome || null;
}

let result1 = longestPalindrome('My mom is called annnna')
let result2 = longestPalindrome('My dad is a racecar athelete')
let result3 = longestPalindrome('That trip with a kayak was quite an adventure!')

console.log(result1)
console.log(result2)
console.log(result3)

关于javascript - 通过反转子串找到最长的回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373769/

相关文章:

javascript - document.getElementById 似乎返回 null

javascript - 为什么 div 比父 div 大?

javascript - 在 XUL 的文本框中捕获换行符

javascript - 将数组从一种格式转换为另一种格式时出现问题

javascript - 当内容改变高度时动态改变容器 div 的高度

javascript - 如何找到div下方页面部分的高度?

c# - Permutation Finder算法分析(伪代码)

PHP - 在数组中查找最小值并组合所有可能的数字以达到给定的总和

c++ - 获取笛卡尔积的算法

algorithm - 确定一个点最接近的预定路线