zoukankan      html  css  js  c++  java
  • 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

    动态规划等

  • 相关阅读:
    关于回调地狱
    node.js 关于跨域和传递给前台参数
    关于js的当前日期的格式化,和两个日期之间的相减的天数
    CSS 关于让页面的高度达到电脑屏幕的底部
    前端 为什么我选择用框架而不是Jquery
    关于webpack打包图片的路径问题
    关于webpack打包js和css
    微信小程序网络请求的setDate
    WinSocket聊天程序实例(多线程)
    Orcal的JDBC数据连接方式
  • 原文地址:https://www.cnblogs.com/zyk1113/p/13754072.html
Copyright © 2011-2022 走看看