PAT - 1040 Longest Symmetric String (25)

Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given “Is PAT&TAP symmetric?”, the longest symmetric sub-string is “s PAT&TAP s”, hence you must output 11.

Input

Each input file contains one test case which gives a non-empty string of length no more than 1000.

Output

For each test case, simply print the maximum length in a line.

Sample Input

Is PAT&TAP symmetric?

Sample Output

11


【题目大意】
给出一个字符串,输出最长的对称子串(回文子串)的长度。例如字符串 “Is PAT&TAP symmetric?” 最长对称字串是”s PAT&TAP s”,输出它的长度 11。
【数据范围】
非空字符串,长度 <= 1000

【解题思路】
枚举起点和终点,check() 函数判断每个子串是否对称。
占着数据量小的无脑暴力。
注意一下 maxx 初始化为 1(串非空,单个字符一定是对称的)。


#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000+10;
const int INF = 0x3f3f3f3f;
string s;
bool dp[MAXN][MAXN];
bool check(int l, int r) {
    while (r > l) {
        if (s[l++] != s[r--])
            return false;
    }
    return true;
}
int main () {
//  freopen("in.txt", "r", stdin); 
    getline(cin, s);
    int maxx = 1;
    for (int i = 0; i < s.length(); i++)
        for (int j = i+1; j < s.length(); j++)
            if (check(i, j)) maxx = max(j-i+1, maxx);
    printf("%d\n", maxx);

    return 0;
}

提交时间状态分数题目编译器耗时
2018/7/21 19:37:43答案正确251040C++ (g++)105 ms
2018/7/21 19:32:22部分正确231040C++ (g++)45 ms
2018/7/21 19:31:52部分正确191040C++ (g++)46 ms

19 分是因为记录最小长度的 maxx 初始化为 0 了
23 分的是觉得,如果前一个子串 (i, j-1) 是对称的,那么加上一个字母后的子串 (i, j) 就不用判断了,一定不会对称(简直智障),事实上如果前一个是 AAA,那么加上一位 A 依然是……
这个耗时简直没眼看~
好像有个马拉车算法处理回文的,记录一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值