dp回文子串

要知道i,j之间的字符串是否是回文串只需要知道(i+1,j-1)是否是回文串并判断arr[i]是否等于arr[j]就可以了

class Solution {
public:
    string longestPalindrome(string s) {
  vector<vector<bool>> dp(s.length(),vector<bool>(s.length(),false));
  int maxlen=0;
  string str="";
  for(int len=1;len<=s.length();len++)
  {//第一重循环是判断子串的长度
   for(int start=0;start<s.length();start++)
   {//确定起点
    int end=start+len-1;
    if(end>=s.length())
     break;
    dp[start][end]=(len==1||(len==2&&s[start]==s[end])||(dp[start+1][end-1]&&s[start]==s[end]));
    if(dp[start][end]&&len>maxlen)
    {
     str=s.substr(start,end-start+1);
     maxlen=str.length();
    }
   }
  }
  return str;
    }
};

你可能感兴趣的:(字符串)