(java)leetcode-5,
分享于 点击 47421 次 点评:164
(java)leetcode-5,
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.
Example:
Input : "babad"
Output : "bab"
Note: "aba" is also a valid answer.
Example:
Input : "cbbd"
Output : "bb"
解题思路:
我一开始的想法是构造一个List,存储回文序列的中间值,然后遍历String中的每一个字符的时候看下是否能够叠加在原来的回文序列中,不满足的话就把那个Substring拿出来跟max_string进行比较,更新max_string。后面发现这种方法实在是很麻烦,尤其是遇到哪种一串相同的字符串的时候,例如"aaaaaa"这种会很麻烦。
后面的想法就是进行一次遍历,把每一个值都当成是回文的中心,扩展开去找以其为中心的最大回文序列,这样会快很多。注意就是要分为奇数长度的和偶数长度的。
public class Solution {
public String longestPalindrome(String s)
{
if (s.length() == 0)
return "";
String substring = s.substring(0,1);
for(int i = 0;i<s.length()-1;i++)
{
//当以其为中心能够组成的最大回文序列已经<=max_string的长度时,停止遍历
if(((s.length() - i)*2-1) <=substring.length())
break;
//长度为奇数的回文序列
int lo1 = loindex(i,i,s);
int len1 = (i-lo1)*2+1;
//长度为偶数的回文序列
int lo2 = loindex(i,i+1,s);
int len2 = (i+1-lo2)*2;
//更新max_string
if(len1>substring.length() && len1 >=len2)
substring = s.substring(lo1, lo1+len1);
else if(len2>substring.length() && len2>len1)
substring = s.substring(lo2, lo2+len2);
}
return substring;
}
public int loindex(int x1,int x2,String s)
{
while(x1 >= 0 && x2<s.length() && s.charAt(x1) == s.charAt(x2))
{
x1--;
x2++;
}
return x1+1;
}
}
相关文章
- 暂无相关文章
用户点评