前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >L2-008 最长对称子串 (25 分)

L2-008 最长对称子串 (25 分)

作者头像
Here_SDUT
发布2022-08-08 16:26:42
发布2022-08-08 16:26:42
20600
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

输入样例:

代码语言:javascript
代码运行次数:0
运行
复制
Is PAT&TAP symmetric?

输出样例:

代码语言:javascript
代码运行次数:0
运行
复制
11

分析 数据很小,暴力求解即可,注意对称子串有奇数和偶数两种,分类讨论一下即可。

代码

代码语言:javascript
代码运行次数:0
运行
复制
//                              _ooOoo_
//                             o8888888o
//                             88" . "88
//                             (| -_- |)
//                              O\ = /O
//                           ____/`---'\____
//                        .   ' \| |// `.
//                         / \||| : |||// \
//                        / _||||| -:- |||||- \
//                         | | \\ - /// | |
//                       | \_| ''\---/'' | |
//                        \ .-\__ `-` ___/-. /
//                    ___`. .' /--.--\ `. . __
//                  ."" '< `.___\_<|>_/___.' >'"".
//                 | | : `- \`.;`\ _ /`;.`/ - ` : | |
//                    \ \ `-. \_ __\ /__ _/ .-` / /
//           ======`-.____`-.___\_____/___.-`____.-'======
//                              `=---='
//
//           .............................................
//                   佛祖保佑     一发AC     永无BUG
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 1e5+10;
const int inf = 0x3f3f3f3f;
const double PI = acos(-1.0);
typedef pair<int,int> PII;

int main(int argc, char const *argv[]) {
    string s;
    getline(cin,s);
    int ans = 1;
    int n = s.size();
    for(int i = 1; i < n - 1; i++) {
        if(s[i] == s[i-1]) {//没有对称中心,长度为偶数
            int now = 1;
            while(i-now-1 >= 0 && i + now < n && s[i-now-1] == s[i+now]) now++;
            ans = max(ans, now*2);
        }
        else if(s[i-1] == s[i+1]) {//对称中心为s[i],长度为奇数
            int now = 1;
            while(i-now >= 0 && i + now < n && s[i-now] == s[i+now]) now++;
            ans = max(ans, now * 2 - 1);
        }
    }
    cout << ans <<endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-3-14 9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档