1.思路:
1.暴力解法:
直接遍歷,兩頭收縮。
classsolution
int maxlen=1;
int begin=0;
char chararray=s.tochararray();
for(int i=0;i)}}
return s.substring(begin,begin+maxlen);
}/*驗證是否為回文串,
從外部驗證,兩邊開始逐漸縮小
*/private
boolean validpalidrome(char chararray,int left,int
right)
left++;
right--;
}return
true
; }
}
時間複雜度:o(n^3)
空間複雜度:o(1)
##注意:回文子串的長度必須大於2
2.動態規劃解法
動態規劃思路:可以考慮將陣列頭尾相同考慮為true,不同設定為false,接下來逐級深入。
最終縮小至最中心。
將回文串轉義為二維陣列,並賦值狀態,如果不等改變狀態,如果相等繼續下一級首尾繼續。
當j-i<3或者j=i時,如果chars[i]=chars[j],則狀態為true.
時間複雜度為o(n^2),空間複雜度為o(n^2).
classsolution
int maxlen=1;
int begin=0;
/*步驟1:定義狀態
*/boolean dp=new
boolean
[len][len];
for(int i=0;i)
/*步驟二:開始遍歷
*/char chars=s.tochararray();
for(int j=1;j)
else
else
if(j-i+1>maxlen&&dp[i][j])}}
}/*substring左閉右開
*/return s.substring(begin,begin+maxlen);
}/*驗證是否為回文串,
從外部驗證,兩邊開始逐漸縮小
*/}
3.中心擴散法
classsolution
char chararray=s.tochararray();
/*中心擴散法:時間複雜度為o(n^2),空間複雜度為o(1),不需要複雜空間
*/int end=0;
int begin=0;
for(int i=0;i)
}/*substring左閉右開
*/return s.substring(begin,end+1);
}/*驗證是否為回文串,
從外部驗證,兩邊開始逐漸縮小
*/private
int expandpalidrome(string s,int left,int
right)
return r-l-1;
}}
leetCode第五題 最長回文子串
題目 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。用例 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 本題採用動態規劃演算法進行題解,關於動態規劃可以查詢一些關於他的資料,本題目屬於比較簡易的規劃演算法,只要找到...
LeetCode第五題最長回文子串
leetcode第五題最長回文子串 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 解題思路 我們可以用動態規劃演算法來解答此題,定義乙個dp二維陣列dp i j d...
leetcode第五題 最長回文子字串
題目 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心擴充套件演算法 回文中心的兩側互為映象。因此,回文可以從它的中心展開,由於所含字母數為偶數的回文的中心...