Leetcode刷题笔记题解(C++):5. 最长回文子串

Leetcode刷题笔记题解(C++):5. 最长回文子串_第1张图片

 

思路一:从第一个开始进行扩展

扩展有两种扩展方式:1.以一个字符为中心进行扩展 2.以两个字符为中心进行扩展

Leetcode刷题笔记题解(C++):5. 最长回文子串_第2张图片

 

代码如下:

class Solution {
public:
    int loc,maxlen; //用于记录起始位置以及回文串的最长长度
    string longestPalindrome1(string s) {
        int length=s.length();
        if(length<2) return s;

        for(int i=0;i=0&&k

思路二:动态规划的思路,用二维数组来标记最长的回文串的前端与 后端,具体思路见图

Leetcode刷题笔记题解(C++):5. 最长回文子串_第3张图片

代码如下:

class Solution {
public:
    string longestPalindrome(string s) {
        int length=s.length();
        string res="";
        if(length<2) return s;
        bool dp[length][length] ;
        memset(dp,false,length*length);
        for(int i=length-1;i>=0;i--){
            for(int j=i;jres.length()){
                    res=s.substr(i,j-i+1);
                }
            }
        }
        return res;
    }
};

 

你可能感兴趣的:(Leetcode算法题解,leetcode,字符串,回文串,c++,动态规划)