JavaScript经典面试题算法:最长回文字符串

下面的解题方法是通过中心扩散法的方式实现的,具体代码和注释如下(时间复杂度: O(n^2),空间复杂度:O(1))

// str字符串
function longestPalindrome(str) {
function palindrome(s, l, r) {
// 循环条件:当 左边索引 >= 0 右边索引 < 字符串长度,并且左右索引的值相等
while(l >= 0 && r < s.length && s[l] === s[r]) {
l--
r++
} // 复制 l - r 之间的字符串返回
return s.slice(l + 1, r)
}
if(str.length < 2) {
return str
} let palindromeStr = '' for(let i = 0; i < str.length; i++) {
// 单数回文字符串的情况
// 如:aaccbb,这个字符串只会返回:a,
// 因为它是双数回文字符串,而这种做法只会从单个字符的左右两边扩散左右
const str1 = palindrome(str, i, i)
// 双数回文字符串的情况、
// 如:aaccbb,那么会从 aa cc bb的 两边扩散
const str2 = palindrome(str, i, i + 1) // 得到最长的回文字符串
const curPlindromeStr = str1.length > str2.length ? str1 : str2 // 与返回中的回文字符串做比较
if(curPlindromeStr.length > palindromeStr.length) {
palindromeStr = curPlindromeStr
}
} return palindromeStr
}

 

测试用例:

const str1 = 'aacaacddcaaaab'
const str2 = 'cccdzabcdcbaccds'
const str3 = 'aaaabcdcbaddd'
const str4 = 'ac'
const str5 = 'aaa' console.log(longestPalindrome(str1)) // clg -> aacddcaa
console.log(longestPalindrome(str2)) // clg -> abcdcba
console.log(longestPalindrome(str3)) // clg -> abcdcba
console.log(longestPalindrome(str4)) // clg -> a
console.log(longestPalindrome(str5)) // clg -> aaa

  

最新文章

  1. Linux 内核中的 Device Mapper 机制
  2. ios数据库常用sql语句
  3. 寻找倒数第K个结点
  4. [sql server] 如何阻止SELECT * 语句
  5. UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)
  6. Windows Live Writer 代码插件改造
  7. MySQL管理一些基础SQL语句
  8. [信息安全] 4.一次性密码 &amp;&amp; 身份认证三要素
  9. 计算机网络-应用层之HTTP协议
  10. 3星|路江涌《共演战略画布》:PPT技巧级别的创新,缺实际分析案例
  11. pyenv global 设置失败 pyenv local 设置就成功了 不知道啥原因
  12. Python 随笔-1
  13. (网页)jQuery判断checkbox是否选中的方法
  14. autoMapper dotnetcore webapi 自动添加映射 abp
  15. js常见知识点3.面向对象之继承、设计模式
  16. 使用C#WebClient类访问(上传/下载/删除/列出文件目录)
  17. golang cgo 使用总结
  18. ssh&amp;scp指定密钥
  19. Javac之inner与nested类
  20. ie,cookie,域名与下划线

热门文章

  1. 【LeetCode】911. Online Election 解题报告(Python)
  2. 【LeetCode】890. Find and Replace Pattern 解题报告(Python & C++)
  3. matplotlib 高阶之Transformations Tutorial
  4. 动态规划题 HDU-1024
  5. 【计项02组01号】Java版图形界面计算器
  6. linux 之 mysql数据库备份与恢复
  7. Flask_响应(四)
  8. Java|从Integer和int的区别认识包装类
  9. Shell 里空语句怎么写 - 半角的冒号
  10. “老”的Flexbox和“新”的Flexbox