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

posted @ 2017-10-26 21:45  hozhangel  阅读(155)  评论(0编辑  收藏  举报