ACM刷题
github代码库:https://github.com/13days/LeetCode-Coding/tree/master/src/simple
Java学习笔记
题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
code
这里就采用暴击中心枚举吧,O(n^2)
下次再更新马拉车吧…有点晚了
class Solution {
public String longestPalindrome(String s) {
if(s.length()==0){
return "";
}
int ansL = 0, ansR = 0, ansLen = 0;
for(int i=0; i<s.length(); i++){
// 奇回文
int len = 1;
while(i-len>=0 && i+len<s.length() && s.charAt(i-len)==s.charAt(i+len)){
len++;
}
len--;
if(2*len+1>ansLen){
ansLen=2*len+1;
ansL = i-len;
ansR = i+len;
}
// 偶回文
if(i+1<s.length() && s.charAt(i)==s.charAt(i+1)){
int L = i, R = i+1;
len = 1;
while(L-len>=0 && R+len<s.length() && s.charAt(L-len)==s.charAt(R+len)){
len++;
}
len--;
if(2*len+2>ansLen){
ansLen=2*len+2;
ansL = L-len;
ansR = R+len;
}
}
}
return s.substring(ansL,Math.min(s.length(),ansR+1));
}
}