• 5-最长回文子串


    题目:

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

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:

    输入: "cbbd"
    输出: "bb"

    解法:

    首先想到的是用两个idx在string移动,然后判断这两个idx之间的string是否是回文串。暴力判断:

    string longestPalindrome(string& s)
    {
        if (s.length() < 2)
        {
            return s;
        }
    
        int ii = 0;    //如果都是相同的字符;
        for (; ii < s.length(); ii++)
        {
            if (s[ii] == s[0])
            {
                continue;
            }
            break;
        }
        if (ii == s.length())
        {
            return s;
        }
    
        string result = s.substr(0,1);
        int idx = 0, idx2 = 0;
        int maxSubLen = 0;    //记录最长字串
        while (idx <= s.length()/2)
        {
            //idx2 = idx + 1;//直接+1的方式,提交后运行超时,因为需要遍历O(n^2)
            idx2 = idx + maxSubLen;//判断当前 idx idx2的间距是否大于maxSubLen,如果小于则不比较;
            while (idx2 < s.length())
            {
                //先判断第一个跟最后一个是否相同
                if (s[idx] != s[idx2])
                {
                    idx2++;
                    continue;
                }
    
                int n = (idx2 - idx + 1) / 2;
                int i = 0;
                int tmp1 = idx;
                int tmp2 = idx2;
                for (; i < n; i++)
                {
                    if (s[++tmp1] != s[--tmp2])
                    {
                        break;
                    }
                }
                if (i == n)//表示 [idx ... idx2]是回文串
                {
                    if (idx2 - idx + 1 > maxSubLen)
                    {
                        maxSubLen = idx2 - idx + 1;
                        result = s.substr(idx, maxSubLen);
                    }
                }
    
                idx2++;
            }
    
            idx++;
        }
        return result;
    }

    注意:

      上面的idx2=idx+maxSubLen,如果直接用idx2=idx+1的话,提交后运行时间超过限制。。。因为当前的最长回文串的长度是maxSubLen,再判断idx,idx+1已经没有意义了,直接 idx2=idx+maxSubLen 减少判断

    运行结果:

    感觉还是要使用数据结构,或者什么算法,因为执行时间太慢了

    题解:

    TODO

    动态规划等

  • 相关阅读:
    kafka_consumer3->spark_master
    为什么.NET感觉上比Java差一点
    学习Scala: 初学者应该了解的知识
    函数式编程 : 一个程序猿进化的故事
    Scala underscore的用途
    不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事
    Scala Collection简介
    C# on Visual Studio Code
    我的Machine Learning学习之路
    Scala on Visual Studio Code
  • 原文地址:https://www.cnblogs.com/zyk1113/p/13754072.html
Copyright © 2020-2023  润新知