筆記試験問題19.LeetCode OJ (5)

1628 ワード

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, and there exists one unique longest palindromic substring 
class Solution {
public:
    string longestPalindrome(string s) {
        //  :               ,      
        string ret;
        int slen = s.size();
        int maxlen = 1; //    
        int pos = 0; //      
        
        for(int i=0; i < slen; ++i)
        {
            int left = i;
            int right = i;
            int len = 0;
        
            while(left>0 && right<(slen-1) && s[left-1] == s[right+1])
            {//   aba
                --left;
                ++right;
                len+=2;
            }
            if(len+1 > maxlen)
            {
                maxlen = len+1; //   
                pos = left;
            }
          
            left = i;
            right = i+1;
            len = 0;
            while(left>=0 && right<slen && s[left] == s[right])
            {//  abba
                ++right;
                --left;
                len += 2;
            }
            
            if(len > maxlen)
            {
                maxlen = len;  //   
                pos = left+1;
            }
        }
            
        for(int j=0; j<maxlen ;++j)
        {
            ret.push_back(s[j+pos]);
        }
        return ret;
    }
};
文字列の中の長男の文字列を探して、私の考えは1つの文字から順番に両側に探して、このように2つの状況に分けて討論します:
1.abaタイプの場合、回文列の長さは奇数個である.
2.abbaタイプで、この場合の回文列の長さは偶数個である.