L2-008. 最长对称子串

原创 2018年04月16日 15:21:38

题目描述
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定”Is PAT&TAP symmetric?”,最长对称子串为”s PAT&TAP s”,于是你应该输出11。

输入

输入在一行中给出长度不超过1000的非空字符串。

输出

在一行中输出最长对称子串的长度。

样例输入

Is PAT&TAP symmetric?

样例输出

11

思路

参考了网上大神的思路,分奇数回文串和偶数回文串考虑,真的是肥肠简单了。

比如,(串的下标均从0开始,i,j的定义见下面代码)
奇数回文串:1111111,当i = 3, j = 3时,maxlen=j*2 + 1 = 7。
再比如,偶数回文串:111111,当i = 2, j = 2时,maxlen = j*2 + 2 = 6。

代码

#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    getline(cin, s);
    int len = s.length();
    int mmax = 0;
    //i表示回文串的最中间下标 
    for(int i=0; i<len; i++){
        //奇数回文串(下标一定是最中间) 
        for(int j=0; i-j>=0&&i+j<len; j++){
            if(s[i-j] != s[i+j]){
                break;
            }else {
                mmax = j*2+1>mmax ? j*2+1 : mmax;
            }
        }
        //偶数回文串(下标是中间靠左) 
        for(int j=0; i-j>=0&&i-j+1<len; j++){
            if(s[i-j] != s[i+j+1]){
                break;
            }else {
                mmax = j*2+2>mmax ? j*2+2 : mmax;
            }
        }
    }

    cout<<mmax<<endl;
    return 0;
} 

L2-008. 最长对称子串(manacher算法)

今天学习了一下manacher算法,比较难理解的是这一步,mx表示的是当前的对称子串的最右端, id表示的这个子串的中间这个点。2*id-i 表示 i 关于 id 的对称点 j p[i]=mx>i?...
  • sinat_30126425
  • sinat_30126425
  • 2016-07-13 22:09:28
  • 304

PATL2-008:最长对称子串(dp)

L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题...
  • junior19
  • junior19
  • 2017-03-12 16:14:19
  • 328

L2-008. 最长对称子串----暴力+dp+Manacher

L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题...
  • bless924295
  • bless924295
  • 2017-03-15 21:47:47
  • 464

PAT L2-008. 最长对称子串(25) (暴力,Manacher算法和DP解决)

1000的长度,100ms,o(N^2)的复杂度是可以过的,那就暴力枚举吧, 每次枚举起点和终点没如果此子串是回文串,那终点-起点+1即为回文串的长度,即可求出最大长度. 中间有个小问题,看代码注释....
  • hurmishine
  • hurmishine
  • 2017-03-24 17:23:50
  • 709

PAT L2-008 最长对称子串

L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输...
  • changjiale110
  • changjiale110
  • 2018-03-05 19:27:23
  • 44

pat L2-008 最长对称子串

L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standa...
  • yjf3151731373
  • yjf3151731373
  • 2016-05-16 12:15:26
  • 1800

L2-008 最长对称子串

原题:https://www.patest.cn/contests/gplt/L2-008 这道题可真是把我累的够呛,一开始是方法错了,后来是题目定义不清晰理解错误,最后终于在第12次提交成功,废话不...
  • zark721
  • zark721
  • 2017-03-20 21:46:17
  • 186

L2-008. 最长对称子串(最长回文串)

【题目链接】 https://www.patest.cn/contests/gplt/L2-008 题目意思 求最长回文串。 解题思路 直接用Manacher算法,秒过,下面就一标准模板...
  • pashuihou
  • pashuihou
  • 2018-01-29 19:44:59
  • 68

团体程序设计天梯赛L2-008 最长对称子串

L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题...
  • a664607530
  • a664607530
  • 2017-03-01 17:57:39
  • 191

最长对称子串——暴力枚举+注意细节

5-12 最长对称子串 (25分) 对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出1...
  • BlessingXRY
  • BlessingXRY
  • 2017-02-21 17:17:40
  • 328
收藏助手
不良信息举报
您举报文章:L2-008. 最长对称子串
举报原因:
原因补充:

(最多只允许输入30个字)