首页 > 其他 > 详细

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

时间:2021-03-28 12:53:02      阅读:14      评论:0      收藏:0      [点我收藏+]

题目描述:

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

输入输出:

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;
}

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

原文:https://www.cnblogs.com/liushz-blog/p/14587886.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!