題目: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);
}