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;
        }
    };
     
     
  • 相关阅读:
    python-13-集合增删查
    python-14-文件操作
    python接口自动化6-参数化关联
    python接口自动化5-session关联
    python-12-字典的嵌套与int快速排序
    python-11-字典的增删改查
    python-10-列表、元组嵌套
    python-9-列表的增删改查
    python-8-字符串索引与切片
    idea设置主题颜色
  • 原文地址:https://www.cnblogs.com/littleswan/p/12517911.html
Copyright © 2011-2022 走看看