問題:給定一個字元串,找出最長的回文子串
例如:
“babad”的最長回文子串為”bab”,當然”aba”也是可以的
解決思路:這種問題要考慮到回文子串是奇數還是偶數情況,分為兩種可能。這裡可以采用從内向外擴散的方法來解決該問題。
例如:回文子串為奇數,從第一個字元元素開始擴散。第一個子串為”b”,然後第二個字元元素為“a”,向左右擴散一位為”bab”,還是回文子串,再向左右擴散不滿足回文條件,則第二個回文子串為“bab”,重複上述操作。回文子串為偶數情況與上述類似。
class Solution {
public static String longestPalindrome(String s) {
int len = s.length();//字元串長度
int maxlen= ;//最長子串長度
int start = ;
//回文為奇數
for(int i = ;i<len;i++){
int first = i-;//左指針
int last = i+;//右指針
//向外擴散
while(first>= && last<len&&s.charAt(first)==s.charAt(last)){
if(maxlen<last-first+){
maxlen = last - first+;
start = first;
}
first--;
last++;
}
}
//回文為偶數
for(int i = ;i<len;i++){
int first = i;
int last = i+;
while(first>=&& last<len&&s.charAt(first)==s.charAt(last)){
if(maxlen<last-first+){
maxlen = last - first+;
start = first;
}
first--;
last++;
}
}
//輸出子串
if(len>){
return s.substring(start,maxlen+start);
}
return null;
}
}