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); } };
注意的问题:
动态规划问题的状态方程和转移方程,必须知道,这个方程有初始化条件
这里就是一个字符的回文串和两个字符的回文串,
所有别的长度的回文串就是根据这个两个初始化条件得
http://blog.csdn.net/feliciafay/article/details/16984031
时间: 2024-10-14 10:07:21