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) {
        if(s.empty() || s == "")
            return "";
        int len = s.length();
        if(len == 1)
            return s;
        int i, maxLen = 1, j, k, localLen;
        string ret = "";
        for(i = 1; i < len; ++i){
            localLen = 1;
            //遇到字符相同的情况
            while(i < len && s[i] == s[i-1]){
                localLen ++;
                i++;
            }
            //计算会回文串两端边界位置
            j = i - localLen - 1;
            k = i;
            while(j >= 0 && k < len){//扩大回文串
                if(s[j] == s[k]){
                    localLen += 2;
                    j--;
                    k++;
                }
                else{
                    if(localLen > maxLen){
                        maxLen = localLen;
                        ret = s.substr(j + 1,k - j - 1);
                    }
                    break;
                }
            }
            //k到头了,但是回文串还没有比较
            if(localLen > maxLen){
                    maxLen = localLen;
                    ret = s.substr(j + 1,k - j - 1);    
            }
        }
        return ret;
    }
};

上述算法的时间复杂度时O(n2),查阅相关资料发现该问题的解法有很多种,具体见最大回文子串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值