码迷,mamicode.com
首页 > 其他好文 > 详细

5. Longest Palindromic Substring

时间:2016-05-05 14:38:01      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

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.

给定字符串S,找到它的最长回文子串。假设S的最长长度是1000,并且只有唯一一个最长子串。

这道题有多种解法,可以使用动态规划,公式为:P(i, j) = P(i+1, j-1) && (S[i] == S[j]),根据长度限制,辅助空间可以静态设为1000*1000,时间复杂度是O(n*n),

空间也是O(n*n),也可以从中间往两边遍历,直到发现不对称的字符,要注意的是回文分分中心字符和没有中心字符两种情况,分别考虑就行了,时间复杂度也是O(n*n),

但是空间只需要O(1),所以本文采用了第二种,代码如下:

string longestPalindrome(string s) {
    int n = s.size();
    string ret;
    for (int i=0; i<n; ++i)
    {
        int L = i, R = i;
        while (L>=0 && R<n && s[L] == s[R])
        {
            --L; ++R;
        }
        ++L; --R;
        if (ret.size() < R-L+1)
            ret = s.substr(L, R-L+1);
        L = i; R = i+1;
        while (L>=0 && R<n && s[L] == s[R])
        {
            --L; ++R;
        }
        ++L; --R;
        if (ret.size() < R-L+1)
            ret = s.substr(L, R-L+1);
    }
    return ret;
}

 

5. Longest Palindromic Substring

标签:

原文地址:http://www.cnblogs.com/zhiguoxu/p/5461590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!