执行结果:
通过
显示详情
执行用时 :12 ms, 在所有 Java 提交中击败了72.89% 的用户
内存消耗 :36.4 MB, 在所有 Java 提交中击败了68.95%的用户
题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
采用中心扩展法,每找到一个更长的,就更新,但是中心有多少个呢,有2n-1个,为什么不是n个呢,因为aba和abba是两种情况,但是他们都是回文串。
代码:
class Solution {
public String longestPalindrome(String s) {
if(s==null||s.length()<1)
{
return "";
}
//采用中心扩展算法
int start=0;
int end=0;
for(int i=0;i<s.length();i++)
{
int len1=help(s,i,i);
int len2=help(s,i,i+1);
int len=Math.max(len1,len2);
if(len>end-start)
{
start=i-(len-1)/2;
end=i+len/2;
}
}
//取子字符串后面的string的s是小写的
return s.substring(start,end+1);
}
public int help(String s,int left,int right)
{
while(left>=0&&right<=s.length()-1&&s.charAt(left)==s.charAt(right))
{
left--;
right++;
}
return right-left-1;
}
}