public class longestPalindromicSubstring_5 {
/**
* 從左向右開始,分別以每個字母爲中心點,進行奇數迴文串和偶數迴文串的判斷
* 記錄同一字母進行奇數迴文串判斷和偶數迴文串判斷的length,找出大者。
* 將該字母的較大length與全局maxLength進行比較。
* 時間複雜度O(n2)空間複雜度O(1)
* @param s
* @return
*/
public static String longestPalindrome(String s) {
int length = s.length();
if(length< 2 ) {
return s;
}
int maxStart = 0;
int maxLen = 0;
for(int i = 0; i < s.length(); ++i){
int j = 0;
int jiLen = 0;
int ouLen = 0;
int jiStart = 0;
int ouStart = 0;
int len = 0;
int start = 0;
int m = 0;
// 奇數的情況
while(i - j >= 0 && i + j < s.length() && s.charAt(i - j) == s.charAt( i + j)){
jiStart = i - j;
jiLen = 2 * j + 1;
++j;
}
// 偶數的情況
while ( i - m >= 0 && i + m + 1 < s.length() && s.charAt(i - m) == s.charAt( i + m + 1) ){
ouStart = i - m;
ouLen = 2 * m + 2;
++m;
}
len = jiLen>ouLen?jiLen:ouLen;
start = jiLen>ouLen?jiStart:ouStart;
maxLen = maxLen>len?maxLen:len;
maxStart = maxLen>len?maxStart:start;
}
return s.substring(maxStart, maxStart + maxLen);
}
public static void main(String[] args){
System.out.println(longestPalindrome("babad"));
}
}
leetcode longest Palindromic Substring 最長迴文子串 第五題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.