【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.