PAT-甲级-1040 Longest Symmetric String (dp(二维))

题目描述:

找出字符串中最长的回文子串长度

输入输出:

Sample Input:

Is PAT&TAP symmetric?

Sample Output:Sample Output:

11

思路:

dp的思想,设字符串str,dp[i][j] = 1 or 0 代表str[i] ~ str[j]间是否是一个回文串
有:

  1. 对字符个数为1的子串:dp[i][i] = 1
  2. 对字符个数为2的子串:遍历str中相邻字符,if(s[i] == s[i + 1]) dp[i][i + 1] = 1
  3. 对字符个数3 ~ len的子串:if(s[i] == s[i + len - 1] && dp[i + 1][i + len - 2] == 1) dp[i][i + len - 1] = 1
#include <iostream>
using namespace std;
int dp[1010][1010];
int main() {
 string s;
 getline(cin, s);
 int len = s.length(), ans = 1;
 for(int i = 0; i < len; i++)
 {
     dp[i][i] = 1;
     if(i < len - 1 && s[i] == s[i + 1])
     {
        dp[i][i + 1] = 1;
        ans = 2;
     }
 }
 for(int i = 2; i < len; i++)
 {
     for(int j = 0; j < len - i; j++)
     {
         if(dp[j + 1][j + i - 1] == 1 && s[j] == s[j + i])
         {
             dp[j][j + i] = 1;
             ans = i + 1;
         }
     }
 }
 printf("%d", ans);
 return 0;
}
posted @ 2021-03-28 10:08  liushz  阅读(53)  评论(0)    收藏  举报