《牛客網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<s.size(); i++){ //子字符串的最大下標爲0到最大值
            for (int j=0; j<i; 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);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章