码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-03-29 12:51:45      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:return   using   main   sam   遍历   cin   put   输入输出   string   

题目描述:

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

输入输出:

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(二维))

标签:return   using   main   sam   遍历   cin   put   输入输出   string   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!