JavaScript之最长回文字符串
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
JavaScript之最长回文字符串的更多相关文章
- 最长回文字符串(manacher算法)
偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ...
- 【转载】最长回文字符串(manacher算法)
原文转载自:http://blog.csdn.net/lsjseu/article/details/9990539 偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid ...
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)
原文转载自:http://blog.csdn.net/yzl_rex/article/details/7908259 回文串定义:"回文串"是一个正读和反读都一样的字符串,比如&q ...
- leetcode 5 Longest Palindromic Substring--最长回文字符串
问题描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- 第5题 查找字符串中的最长回文字符串---Manacher算法
转载:https://www.felix021.com/blog/read.php?2040 首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一 ...
- 转载-----Java Longest Palindromic Substring(最长回文字符串)
转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...
- Longest Palindromic Substring (最长回文字符串)——两种方法还没看,仍需认真看看
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- csu-1328 近似回文词 和 最长回文字符串
原博文地址:http://blog.csdn.net/u012773338/article/details/39857997 最长回文子串 描述:输入一个字符串,求出其中最长的回文子串.子串的含义是: ...
- hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 【LeetCode】553. Optimal Division 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- .Net下你不得不看的分表分库解决方案-多字段分片
.Net下你不得不看的分表分库解决方案-多字段分片 介绍 本期主角:ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 ...
- C++单元测试框架gtest使用
作用 作为代码编码人员,写完代码,不仅要保证编译通过和运行,还要保证逻辑尽量正确.单元测试是对软件可测试最小单元的检查和校验.单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成 ...
- PAT甲组 1010 Radix (二分)
1010 Radix (25分) Given a pair of positive integers, for example, \(6\) and \(110\), can this equatio ...
- 【Java例题】4.2 级数求和2
2. 计算级数之和: y=1/1!*x-1/3!*x^3+1/5!*x^5+...+ (-1)^n/(2n+1)!*x^(2n+1). 这里的"^"表示乘方,"!&quo ...
- ☕【难点攻克技术系列】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序
BitMap(位图)的介绍 BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射,其中数据库中有一种索引就叫做位图索引. 在具有性能优化的数据结构中,大家使用最多的就是has ...
- [opencv]调用鼠标事件执行grabcut算法实现阈值分割
#include<iostream> #include <opencv2/opencv.hpp> #include <math.h> using namespace ...
- CS5211芯片|EDP to LVDS|CS5211应用方案
CS5211芯片–EDP to LVDSDisplayPort到LVDS转换器双通道DP输入,双链路LVDS输出CS5211是一个显示端口到LVDS转换器设计的PC机,利用GPU和显示端口(DP) 或 ...
- Spring企业级程序设计 • 【第3章 面向切面编程】
全部章节 >>>> 本章目录 3.1 AOP基本概念和术语 3.1.1 AOP概念 3.1.2 AOP的术语解释 3.1.3 通知类型介绍 3.1.4 通过AOP模拟事务操 ...
- 使用 JavaScript 中的 document 对象查找 HTML 元素,实现“登录”按钮的高亮特效 鼠标悬浮于“登录”按钮时,按钮高亮显示;
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 document 对象查找 HTML 元素,实现"登录"按钮的高亮特效 鼠标悬浮于"登录" ...