《牛客网leetcode144题》Given a string S, find the longest palindromic substring in S

题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

题意:找出字符串中的最大回文子字符串

代码及思路:

//中心思想:动态规划,二维数组中存放的是原字符串第j个到第i个组成的子字符串是否是回文,而这个子字符串是否是回文的根据就是,

//第i个元素和第j个元素相等并且第j+1到第i-1个字符组出成的子字符串是回文,
string longestPalindrome(string s) {
        int dp[s.size()][s.size()] ;  //数组存放的是j~i个元素组成的子字符串是否是回文,是回文存的是1,否则是0;
        int left = 0, right = 0, maxlength = 0; //分别存放最大子串的第一个元素下标、最后一个元素下标、最大长度
        for (int i=0; i             for (int j=0; j                 dp[j][i] = (s[i] == s[j] && ((i-j < 2) || dp[j+1][i-1])); //如果j和i下标的元素相等,并且里面的也是回文或者里面只有一个元素了,就把动态数组的j行i列赋值为1
                if (dp[j][i] && maxlength< i-j+1) {  //如果新找出的回文子字符串的长度大于原来的长度,给最大子串的第一个元素下标、最后一个元素下标、最大长度重新赋值
                    maxlength = i-j+1;
                    left = j;
                    right = i;
                }
            }
            dp[i][i] = 1;//单个字符串就是回文串,将动态数组的元素置为1。 
        }
         
        return s.substr(left, right-left+1);
    }

你可能感兴趣的:(科技)