• leetcode5. Longest Palindromic Substring


    leetcode5. Longest Palindromic Substring

    题意:

    给定一个字符串s,找到s中最长的回文子字符串。可以假设s的最大长度为1000。

    思路:

    O(n)遍历s,然后以每个char为回文的中心,向两边尽可能延长,以此找出最长的回文。
    初始化left和right的时候,因为回文的特征直接跳过与该char相同的字符。

    ac代码:

    C++

    class Solution {
    public:
        string longestPalindrome(string s) {
            int len = s.length();
            int res = 0;
            int start = -1;
            for(int i = 0; i < len; i++)
            {
                int u = i;
                while(i<len-1 && s[i+1] == s[i]) i++;
                int l = u - 1;
                int r = i + 1;
                while(l>=0&&r<len&&s[l] == s[r]) {l--; r++;}
                //res = max(r - l - 1, res);
                if(r - l -1 > res)
                {
                    res = r - l -1;
                    start = l ;
                }
            }
            return s.substr(start + 1,res);
        }
    };
    

    python

    class Solution(object):
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            start = -1
            ans = 0           
            i = 0
            while i < len(s):
                l = i - 1
                while i < len(s) - 1 and s[i+1] == s[i]:
                    i += 1
                r = i + 1
                while l >= 0 and r < len(s) and s[l] == s[r]:
                    l -= 1
                    r += 1
                if r - l - 1 >= ans:
                    ans = r - l - 1
                    start = l
                i += 1
            return s[start + 1:start + 1 + ans]
    
  • 相关阅读:
    斜二进制数
    贝贝的波浪数
    1058: 电文保密
    1065: 贝贝的加密工作
    低危漏洞- X-Frame-Options Header未配置
    1064: 不明飞行物(ufo)
    支付
    1067: 密室寻宝(find)
    c++10进制转换为任意2-16进制数字
    1066: 单词游戏(game)
  • 原文地址:https://www.cnblogs.com/weedboy/p/7146997.html
Copyright © 2020-2023  润新知