【leetcode】5. Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

思路就是:

  逆置字符串得到新的字符串,记为res。

  在原来的字符串s和res中找最大公共连续子串。(这个不是很会,方法是构建二维数组,如果两个字符相等,等于左上角的值+1)构建出一个如下的二维数组

  

   b  a  b

c  0  0  0

a  0  1  0

b  1  0  2

a  0  2  0

 

然后从后扫描最大的数,和其下标,就拿到最大的对角线了。根据下标和对角线的数字,就可以找到最长连续公共子串

#include<vector>
#include<string>
using namespace std;

class Solution {
public:
    string longestPalindrome(string s) {
        int len=s.length();
        if(len==0||len==1)
            return s;

        string res;
        for(int i=len-1;i>=0;i--)
            res+=s[i];
    
        int arr[1000][1000]={0};

        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                if(s[i]==res[j]){
                    if(i==0||j==0)
                        arr[i][j]=1;
                    else arr[i][j]=arr[i-1][j-1]+1;
                }
                else arr[i][j]=0;

            }
        }

        int maxv=0,maxindex=0;

        for(int i=len-1;i>=0;i--)
            for(int j=len-1;j>=0;j--){
                if(arr[i][j]>maxv){
                    maxv=arr[i][j];
                    maxindex=j;}
            }

        string ret="";
        for(int i=maxindex;maxv>0;maxv--){
            ret=ret+res[i--];
        }
        return ret;

    }
};

 

 之前用字符串长度创建二维数组,给memory 超出了,直接int[1000][1000]就ok了,题目里反正讲到最长长度是1000.

 

 

posted @ 2016-07-29 13:52  0giant  阅读(162)  评论(0编辑  收藏  举报