zoukankan      html  css  js  c++  java
  • 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    资质有限,所以我就只好,写了一个非常差的example,而且我这个也不能保证从这个字符串中

    返回来的是一个非常的长的回文子串。

    class Solution {
    public:
        string longestPalindrome(string s) {
            int sizenum = s.size();
            if(sizenum < 2)return NULL;
            //string min_s = NULL;
            int sign_i = 0;
            int sign_j = 0;
            for(int i = 0;i < sizenum;i++){
                for(int j=sizenum - 1;j > i;j--){
                    if(s[i] == s[j]){
                        sign_i = i;
                        sign_j = j;
                        while(sign_i != sign_j && 
                        s[sign_i] == s[sign_j] &&
                        sign_i < sign_j){
                            sign_i ++;
                            sign_j --;
                        }
                        if( sign_i == sign_j || sign_i > sign_j){
                        int sign_size = j - i + 1;
                        string min_s = s.substr(i,sign_size);
                            return min_s;
                        }
                    }
                }
            }
            return NULL;
        }
    };

    从leetcode上找了一个非常好的例子

    下面贴出来代码:

    class Solution {
    public:
        string longestPalindrome(string s) {
            int start = 0, end = 0, len = 0, g_start = 0, i = 0, n = s.size();
            while(i<n) {
                start = i, end = i;
                while(i+1<n && s[end] == s[end+1]) end++ ;
                i = end + 1;
                while(start-1>=0 && end+1<n && s[end+1] == s[start-1]) {
                    start-- ;
                    end++ ;
                }
                if(end - start + 1 > len) {
                    len = end - start + 1;
                    g_start = start;
                }
            }
            cout<<s.substr(g_start, len);
            return s.substr(g_start, len);
        }
    };
    class Solution {
    public:
        string longestPalindrome(string s) {
            int sizenum = s.size();
            if(sizenum < 2)return NULL;
            //string min_s = NULL;
            int sign_i = 0;
            int sign_j = 0;
            for(int i = 0;i < sizenum;i++){
                for(int j=sizenum - 1;j > i;j--){
                    if(s[i] == s[j]){
                        sign_i = i;
                        sign_j = j;
                        while(sign_i != sign_j && 
                        s[sign_i] == s[sign_j] &&
                        sign_i < sign_j){
                            sign_i ++;
                            sign_j --;
                        }
                        if( sign_i == sign_j || sign_i > sign_j){
                        int sign_size = j - i + 1;
                        string min_s = s.substr(i,sign_size);
                            return min_s;
                        }
                    }
                }
            }
            return NULL;
        }
    };
     
     
  • 相关阅读:
    R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
    R语言马尔可夫体制转换模型Markov regime switching
    php设计模式--简单介绍
    css字体图标的使用方法
    linux系统管理--top命令
    linux系统管理--查看进程
    linux系统管理--进程管理
    用户体验时代的9条建议
    【转】纯手工玩转 Nginx 日志
    【转】一分钟内检查Linux服务器性能
  • 原文地址:https://www.cnblogs.com/littleswan/p/12517911.html
Copyright © 2011-2022 走看看