題目描述
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入: 「babad」
輸出: 「bab」
注意: 「aba」 也是乙個有效答案。
示例 2:
輸入: 「cbbd」
輸出: 「bb」
很明顯可以使用暴力破解,也可以使用動態規劃,但是還是馬拉車演算法比較靠譜,但是我這裡只是有了其一半不到的方式,
**:只超過了近一半的提交
三種方法解決這個問題
動態規劃實現的方法
具體的可以看看這個部落格
馬拉車演算法的具體描述,挺詳細的,我就直接搬運過來啦
class solution
stringbuilder tem = new stringbuilder("#");
for (int i = 0; i < s.length(); i++)
// system.out.println(tem);
int start = 0;
int end = tem.length() - 1;
int result = new int[tem.length()];
result[0] = 1;
result[tem.length() - 1] = 1;
for (int i = 1; i < tem.length() -1 ; i++) else
}} // system.out.println(arrays.tostring(result));
//尋找result陣列中的最大值,並且記錄其下標,注意的是我們尋找的是除了第乙個和最後乙個的下標
int max = result[1];
int index = 1;
for (int i = 0; i < result.length - 1; i++)
} //接下來得到陣列中的原來元素,得到返回值
//前半部分下標
start = index - max / 2 + 1;
// system.out.println("star " + start);
// system.out.println("end " + end);
//後半部分下標
end = index + max /2 - 1 ;
stringbuilder tembuilder = new stringbuilder();
while (start <= end) else
start ++;
} return new string(tembuilder);
}}
2023年12月25日
重置,嘗試使用動態規劃初始化dp[i][i] = true;
和長度為2的dp[i][i + 1]
class solution
boolean dp = new boolean[s.length()][s.length()];
// 初始化為 1
for (int i = 0; i < dp.length; i++)
for (int i = 0; i < dp.length - 1; i++)
}for (int i = 2; i < dp.length; i++) }}
int start = 0;
int end = 0;
int max = 0;
for (int i = 0; i < dp.length; i++) }}
return s.substring(start,end + 1);
}}
這個效率是真的高:
待學習
class solution
int range = new int[2];
char chars = s.tochararray();
for (int i = 0; i < s.length(); i++)
return s.substring(range[0],range[1]+1);
}public static int findlongest(char chars,int range,int low)
return ans;
}}
5 最長回文子串
給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 方法1 用馬拉車演算法 字串動態規劃 來求最長回文子串時間複雜度可以達到o n 但是部落格裡面有個小失誤 這個id應該不是最大回文...
5 最長回文子串
給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution def longestpalindrome self,s k len s olist...
5 最長回文子串
給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 這道題比較船艇的應該是dp求法,但鄙人的dp特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...