zoukankan      html  css  js  c++  java
  • 最长回文串

    方法一:暴力求解O(n3)

    遍历所有字串并且判断判断时候是回文找到最长回文串。

    方法二:以字符串每个字符为中心向左右寻找回文串,记录最大回文串位置和长度。O(n2)。注意:例如“ACCAP”把CC看成一个字符,做特殊处理。

    string longestPalindrome(string s) {
        if (s.size() == 0)return "";
        int longest_len = 1;
        string res = s.substr(0, 1);
        for (int i = 0; i<s.size(); i++){
            int left = i - 1;
            int right = i + 1;
            int tmp_len = cal_length(s, i, left, right);
            //cout << left << " " << right <<" "<<tmp_len<<endl;
            if (tmp_len>=longest_len){
                longest_len = tmp_len;
                res = s.substr(left + 1, longest_len);
            }
        }
        return res;
    }
        
        int cal_length(string s,int mid,int &left,int& right){
            
            while(s[mid]==s[right])right++;//特殊处理
            while(left>=0&&right<s.size()&&s[left]==s[right]){
                left--;
                right++;
            }
            
            return right-left-1;
        }

    还有更好的用“马拉车算法”和动态规划。这里就不细说了,网上就更多更好讲解博客。

  • 相关阅读:
    Emacs 安装 jedi
    PHP+ MongoDB
    Debian 7 安装 Emacs 24.3
    在Code first中使用数据库里的视图
    Emacs安装auto-complete
    Debian 7.4 中配置PHP环境
    ASP.NET MVC 下载列表
    JDicom使用指南
    Windows常用的DOS命令
    Entity Framework问题总结
  • 原文地址:https://www.cnblogs.com/inception6-lxc/p/9246397.html
Copyright © 2011-2022 走看看