class Solution { public: string longestPalindrome(string s) { int length=s.length(); int maxlen=0; int start=0; bool flag[100][100]={false}; //初始化一个字符的回文串的动态状态 for(int i=0;i<length;i++){ flag[i][i]=true; if(maxlen<1){ maxlen=1; start=i; } } //初始化状态矩阵,这里是长度为2的回文串 for(int i=0;i<length-1;i++){ if(s[i]==s[i+1]){ flag[i][i+1]=true; if(maxlen<2){ maxlen=2; start=i; } } } for(int len=3;len<=length;len++){ //回文串的长度,从3开始,长度1,2是初始化的 for(int i=0;i<=length-len;i++){ //子串起始地址 int j=i+len-1; //子串结束地址 if(s[i]==s[j]&&flag[i+1][j-1]){ flag[i][j]=true; if(maxlen<len){ maxlen=len; start=i; } } } } return s.substr(start,maxlen); } };
相关文章: