トピックリンク
タイトル説明
文字列sを考えると、最も長いサブストリングパリンドロームを見つけることです。あなたは1000秒の最大の長さと仮定することができます。
例1
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
例2
输入: "cbbd"
输出: "bb"
問題(中央拡張アルゴリズム)へのソリューション
public String longestPalindrome(String string) {
if (null == string || string.length() < 1) return "";
int start = 0, end = 0;
int num1, num2, len;
for (int i = 0; i < string.length(); i++) {
num1 = getMaxLength(string, i, i);
num2 = getMaxLength(string, i, i + 1);
len = Math.max(num1, num2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return string.substring(start, end + 1);
}
public int getMaxLength(String s, int left, int right) {
int L = left, R = right;
while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
L--;
R++;
}
return R - L - 1;
}
複雑性分析
時間複雑:$のO(N ^ 2)$は、経費が中心の周りに回文O(N)時間を延長するので、合計複雑さがある:$ O(N ^ 2)$
宇宙複雑:$ O(1)$
注釈
センター展開法の暴力より合理的、無ブラインドループの一部に比べて、境界は比較の両側に減少の両方の場合で複数の中央です。
別のアルゴリズムの複雑さは$ O(n)は$ Manacherアルゴリズム、および補足上の他のフォローアップ研究です。
付属の
上記