最长回文子串
程序员文章站
2022-07-13 22:06:27
...
题目:
解法一:
暴力解法:找出该字符串的所有子串,判断回文串,取最大,这里不做演示
解法二:
时间复杂度为O(n^2)
具体做法如下:
- 以一个字符为中心,向左右扩展,如果左右字符相同,则继续扩展,否则,改变中心字符的位置,继续扩展操作
- 在这个过程中,以i为指针,i可能在串s某个奇数子串的中间位置,也可能是串s某个偶数子串的偏左位置,因此,需要按照奇数和偶数的方案,对字符串遍历
实现代码如下;
package cn.palindrome;
/**
* @program: algorithm_learn
* @description: 最长回文子串
* @author: Mr.Luo
* @create: 2020-06-10 19:44
*/
public class Solution_3 {
private static int index;
private static int len;
public static String maxPalindRome(String s){
if (s.length() < 2){
return s;
}
for (int i = 0; i <s.length() - 1; i++) {
//奇数式
PalindRomeHelper(s,i,i);
//偶数式
PalindRomeHelper(s,i,i+1);
}
return s.substring(index, index + len);
}
private static void PalindRomeHelper(String s, int l, int r) {
while (l>=0 && r<s.length() && s.charAt(l) == s.charAt(r)){
l--;
r++;
}
if (len < r - l - 1){
len = r - l - 1;
index = l + 1;
}
}
public static void main(String[] args) {
// String s = "babad";
String s2 = "cbbd";
// System.out.println(maxPalindRome(s));
System.out.println(maxPalindRome(s2));
}
}
上一篇: Unity 截图
下一篇: 游戏制作之路(19)角色实现向上跳动