Leetcode 5 Longest Palindromic Substring
来源:互联网 发布:眼镜零售店软件 编辑:程序博客网 时间:2024/06/18 05:33
Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
Solution1
- 最简单的方法是用暴力去遍历。思路是每次迭代的时候都固定一个i,然后从后面去遍历整个字符串,判断两个指针中间是否为回文串,从后面遍历的好处是:如果找到某一段是回文串,则可以提前退出这次查找,因为剩下的即便有回文串也一定比当前已经找到的要短。但即便如此,这种思路实现在leetcode上对于特定的字符串会报超时错误。代码如下:
public class Solution { public String longestPalindrome(String s) { if(s.length()==0) return ""; int start=0,end=0; for(int i=0;i<s.length();i++){//每次迭代,都先固定i后去遍历j直到找到一个回文串 for(int j=s.length()-1;j>=i;j--){ int k=i,l=j; for(;k<l;k++,l--) if(s.charAt(k)!=s.charAt(l)) break;//此次循环不是回文串 if(k>=l){//表明是回文串 if(j-i>end-start){ start = i; end = j; } break;//这是此次固定i后能找到的最长的回文串,所以j不用再继续减了 } } } return s.substring(start,end+1); }}
Solution2
- 解法1超时主要在于当字符串的一段全是重复字符的时候,都必须这段重复字符进行遍历尝试,从而浪费了大量时间,比如”baaaaaaaaab”,实际可以转换另一种思路,因为每一段回文串都必定是以其中一个字符为中心点对称的,所以可以根据这个特点来从某一个中心点去往两边扩展,观察该中心点两边是否对称,并且在选择中心点的时候直接跳过那些重复字符。代码如下:
public class Solution { public String longestPalindrome(String s) { if(s.length()==0) return ""; int start=0,end=1; for(int i=0;i<s.length();){ int j=i+1; for(;j<s.length()&&s.charAt(j)==s.charAt(i);j++);//跳过重复的字符 int m=i-1,n=j;//从重复字符的两端开始判断是否对称 for(;m>=0&&n<s.length()&&s.charAt(m)==s.charAt(n);m--,n++); if(n-m-1>end-start){ start = m+1; end = n; } i=j;//下一次判断直接跳过重复的字符 } return s.substring(start,end);//当为空字符串的时候,无法调用substring()方法 }}
- 可以看到这种思路的主要特定是以每一个字符为中心点,然后以此往两边扩张到最长。
0 0
- LeetCode 5 - Longest Palindromic Substring
- LeetCode(5) Longest Palindromic Substring
- Leetcode【5】:Longest Palindromic Substring
- [leetcode 5] Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring
- [Leetcode] 5 - Longest Palindromic Substring
- LeetCode 5:《Longest Palindromic Substring》
- [leetcode 5] Longest Palindromic Substring
- LeetCode | #5 Longest Palindromic Substring
- leetcode 5 Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring
- LeetCode(5) Longest Palindromic Substring
- LeetCode 5:Longest Palindromic Substring
- LeetCode 5 - Longest Palindromic Substring
- leetcode #5 Longest Palindromic Substring
- Longest Palindromic Substring leetcode 5
- leetcode 5 -- Longest Palindromic Substring
- java内存泄露补充例子
- OpenCV图像处理篇之腐蚀与膨胀
- 素数距离问题
- ch3 控制程序流程
- 多线程编程模型
- Leetcode 5 Longest Palindromic Substring
- 数据结构实验之求二叉树后序遍历和层次遍历
- SQL中数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)
- VBScript详解(一)
- ch4 初始化和清除
- ch5 隐藏实施过程
- 关于将navigationBar的背景设置成透明,并且让navigationItem展示出来
- hdu 1323 Perfection
- 事件冒泡和事件捕获