![XEJ6QC0TA6NSQ}}3H%S0I.png
    题解:
    对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。因此写出动态规划方程:
    3.最长回文子串 - 图1
    其中,其他情况包括:1.其子串不为回文串 2. 其i>j,不符合字符串规范
    从而,状态转移方程为
    3.最长回文子串 - 图2
    从而边界条件为:
    ![](https://cdn.nlark.com/yuque/__latex/e464ef822e0bd47560f8582e6b6b4283.svg#card=math&code=%5Cleft%20%5C%7B%20%5Cbegin%7Bmatrix%7D%0AP%28i%2Ci%29%20%3D%20true%5C%5C%0AP%28i%2Ci%2B1%29%20%3D%20%28S_i%20%3D%3D%20S
    %7Bi%2B1%7D%29%0A%5Cend%20%7Bmatrix%7D%0A%5Cright%20.%0A%5C%5C&height=52&width=724)

    java代码:

    1. class Solution {
    2. public String longestPalindrome(String s) {
    3. int n = s.length();
    4. boolean[][] dp = new boolean[n][n];
    5. String ans = "";
    6. for (int l = 0; l < n; ++l) {
    7. for (int i = 0; i + l < n; ++i) {
    8. int j = i + l;
    9. if (l == 0) {
    10. dp[i][j] = true;
    11. } else if (l == 1) {
    12. dp[i][j] = (s.charAt(i) == s.charAt(j));
    13. } else {
    14. dp[i][j] = (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]);
    15. }
    16. if (dp[i][j] && l + 1 > ans.length()) {
    17. ans = s.substring(i, i + l + 1);
    18. }
    19. }
    20. }
    21. return ans;
    22. }
    23. }
    24. 作者:LeetCode-Solution
    25. 链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/
    26. 来源:力扣(LeetCode
    27. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    附上一个暴力破解的算法:

    1. class Solution {
    2. public String longestPalindrome(String s) {
    3. String max = s.substring(0,1);
    4. for (int i = 0; i < s.length();i++){
    5. //比它短的就不用判断了
    6. for (int j = i+max.length();j < s.length() ; j++){
    7. String temp = s.substring(i,j+1);
    8. boolean flag = true;
    9. //判定temp是否回文
    10. for (int k = 0;k<=temp.length()/2-1;k++){
    11. if (temp.charAt(k) != temp.charAt(temp.length()-k-1)){
    12. flag = false;
    13. break;
    14. }
    15. }
    16. if(flag){
    17. max = temp;
    18. }
    19. }
    20. }
    21. return max;
    22. }
    23. }