5、最长回文子串Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
把题目放着,先想想^^
2017-10-27 14:46更新如下:
可以用类似例四的方法,计算每个子串是否回文,额,
15:58 终于完成啦~~在LeetCode提交好多次,终于accept!
class Solution { public: string longestPalindrome(string s) { int i, ii, k, n=s.length(); for( k = n; k > 0; k--){ for( i = 0; i < n - k + 1; i++){ ii=i; int j = k + i - 1; while(ii <= j){ if(s[ii++] != s[j--]){ break; } if(ii > j) return s.substr( i, k ); } } } } };
k代表这一轮要比较的字串都是长度为k。长度为k,即s[ i,k + i - 1 ]这个子串,且i的取值范围0 ~ n - k。
取子串之后,开始计算这个子串:比较这个子串第一个字母和最后一个字母是否相等(如S=abbacc的一个子串s=abba,第一个字母和最后一个字母都是a),不相等的话进行下一个子串,相等的话,比较第二个字母和倒数第二个字母(如s=abba,s[1] ==s[3],都是'b')......当到了i > j 时,说明这个就是回文。
因为是从最大长度开始比较,即k从n开始减小,所以计算过程中只要遇到一个回文,那么这个回文就是最大长度回文,之后的k都小于当前的长度k,所以遇到一个回文就是最大长度回文,不必再向下寻找。
16:15:48