算法题 - leetCode - 最长回文子串
前言
题目链接:最长回文子串
解题思路
做完这道题,去看Leetcode 的题解,才发现有很多种方法,我这方法算是动态规划吧。 主要思路是,求最长回串,那么其实即是求 字符串和反串的最长公共子串。当然即使这个公众子串还有一个特点,那就是该子串在 原字符串中的起始位置等于 反串的结束位置。
代码
class Solution {
public String longestPalindrome(String s){
String re = s.charAt(0)+"";//默认肯定有一个字符
int left = 0, right = s.length() - 1;
int M = s.length();
int dp[][] = new int[M+2][M+2];
for (int i = 1; i <= M; i++)
for (int j = M; j >= 1; j--) {
if (s.charAt(i - 1) == s.charAt(j -1)) {
dp[i][j] = dp[i - 1][j + 1] + 1;
if (dp[i][j] > 1 && Math.abs(dp[i][j] - dp[j][i]) == i - j) {
if (re.length() < i - j + 1) {
re = s.substring(j - 1, i);
}
}
}
}
return re;
}
}
结尾
本题的解法空间时间复杂度均为O(n^2),有同学想了解其他解法可以去leetcode题目详解看下其他解法
转载自:https://juejin.cn/post/7006672722566578190