示例 1:
輸入: 「babad」
輸出: 「bab」
注意: 「aba」 也是乙個有效答案。
示例 2:
輸入: 「cbbd」
輸出: 「bb」
1、暴力解法
public
class 最長回文字串
int maxlen=1;
int begin=0;
//轉換成字元陣列
char
chararray=s.
tochararray()
;//列舉所有長度嚴格大於1的字串 chararray[i...j]
//這裡寫出所有字串
for(
int i=
0;ireturn s.
substring
(begin,begin+maxlen);}
//這裡判斷是否為回文字串
public
boolean
validpalindromic
(char
chararray,
int left,
int right)
left++
; right--;}
return
true;}
}
o(n^3) o(n)
2、中心擴充套件演算法
ublic class 最長回文字串2
int start=0,end=0;
for(int i=0;iend-start)
}return s.substring(start,end+1);
}//找到最大的回文長度
public static int expandaroundcenter(string s,int left,int right)
int maxlen=1;
int begin=0;
boolean dp=new boolean[len][len];
for(int i=0;imaxlen)}}
return s.substring(begin,maxlen+begin);
}}
listarm_len = new arraylist();
int right = -1, j = -1;
for (int i = 0; i < s.length(); ++i) else
arm_len.add(cur_arm_len);
if (i + cur_arm_len > right)
if (cur_arm_len * 2 + 1 > end - start)
}stringbuffer ans = new stringbuffer();
for (int i = start; i <= end; ++i)
}return ans.tostring();
}public int expand(string s, int left, int right)
return (right - left - 2) / 2;
}
}
o(n)
o(1)
最長回文串的解法
最長回文子串是最初我在網易筆試的時候遇見的,當時天真的把原字串s倒轉過來成為s 以為這樣就將問題轉化成為了求s和s 的 最長公共子串 的問題,而這個問題是典型的dp問題,我也在前面的文章中介紹了3中解決這個問題的方法。但是非常可惜,後來才知道這個演算法是不完善的。那麼到底為什麼呢?聽我慢慢道來。s ...
最長回文字串的三種解法
題目描述 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 想看 的這裡 method one 暴力演算法 解析 暴力演算法就是字串的每乙個可能的字串進行判斷 時...
最長回文子串解法
沒咋麼過腦子,瞬間能想到的思路大概為 abcabcbb 比如這個字串 首先 宣告乙個陣列 裡面存放各種開分來的字串 切分條件是當這次迴圈的值 存在於當前的陣列中 像這樣abc bca cab abc bcb cb 最初的實現 var str 生成一些隨機字元 for var i 0 i 100000...