最长回文串:LeetCode:Longest Palindromic Substring

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);
}
};
View Code

 注意的问题:

动态规划问题的状态方程和转移方程,必须知道,这个方程有初始化条件

这里就是一个字符的回文串和两个字符的回文串,

所有别的长度的回文串就是根据这个两个初始化条件得

http://blog.csdn.net/feliciafay/article/details/16984031

posted @ 2015-05-02 16:27  kkshaq  阅读(157)  评论(0编辑  收藏  举报