【Leetcode】【Longest Palindromic Substring】【最长回文子串】【C++】

  • 题目:给定字符串,求其最长的回文子串
  • 说明:给定字符串长度为1000以内。
  • 思路:for循环遍历字符串,求以i为中心的回文子串长度。与最长回文子串长度max_len比较,若大于max_len,则更新max_len。
  • 说明:注意分开处理子串长度为奇偶的两种情况
  • 时间复杂度:O(N2)。
  • 代码:
    class Solution {
    public:
        string longestPalindrome(string s) {
            int len_s=s.size();
            int max_len=0;
            int cen_pos=0;
            bool flag=false;
            for(int i=0;i<len_s;i++)
            {
                int cur_len=0;
                while((i-cur_len)>=0 && (i+cur_len)<len_s && s[i-cur_len]==s[i+cur_len])
                    cur_len++;
                if(cur_len>max_len)
                {
                    max_len=(cur_len-1);
                    cen_pos=i;
                    flag=false;
                }
                
                cur_len=0;
                while((i-cur_len-1)>=0 && (i+cur_len)<len_s && s[i-cur_len-1]==s[i+cur_len])
                    cur_len++;
                if(cur_len>max_len)
                {
                    max_len=cur_len;
                    cen_pos=i;
                    flag=true;
                }
                
            }
            if(flag)
                return s.substr(cen_pos-max_len,2*max_len);
            return s.substr(cen_pos-max_len,2*max_len+1);
            
        }
    };

     

posted @ 2018-06-09 15:23  dreamer123  阅读(1497)  评论(0编辑  收藏  举报