JavaScript之最长回文字符串
2024-09-01 00:19:06
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
最新文章
- Linux 内核中的 Device Mapper 机制
- ios数据库常用sql语句
- 寻找倒数第K个结点
- [sql server] 如何阻止SELECT * 语句
- UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)
- Windows Live Writer 代码插件改造
- MySQL管理一些基础SQL语句
- [信息安全] 4.一次性密码 &;&; 身份认证三要素
- 计算机网络-应用层之HTTP协议
- 3星|路江涌《共演战略画布》:PPT技巧级别的创新,缺实际分析案例
- pyenv global 设置失败 pyenv local 设置就成功了 不知道啥原因
- Python 随笔-1
- (网页)jQuery判断checkbox是否选中的方法
- autoMapper dotnetcore webapi 自动添加映射 abp
- js常见知识点3.面向对象之继承、设计模式
- 使用C#WebClient类访问(上传/下载/删除/列出文件目录)
- golang cgo 使用总结
- ssh&;scp指定密钥
- Javac之inner与nested类
- ie,cookie,域名与下划线
热门文章
- 【LeetCode】911. Online Election 解题报告(Python)
- 【LeetCode】890. Find and Replace Pattern 解题报告(Python & C++)
- matplotlib 高阶之Transformations Tutorial
- 动态规划题 HDU-1024
- 【计项02组01号】Java版图形界面计算器
- linux 之 mysql数据库备份与恢复
- Flask_响应(四)
- Java|从Integer和int的区别认识包装类
- Shell 里空语句怎么写 - 半角的冒号
- “老”的Flexbox和“新”的Flexbox