最长对称子串

本文介绍了一种寻找给定字符串中最长对称子串的方法,并提供了详细的算法实现过程。通过对字符串进行遍历检查,该算法能够有效找出最长的对称子串并返回其长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

输入格式:

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

输出格式:

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

输入样例:

Is PAT&TAP symmetric?

输出样例:

11

 分析:两种情况,一是对称中心为一个字符,如12321;另一个是对称中心为两个字符,如123321。接下来暴力就好了

代码:

#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;

char str[2000];
int cnt = 0;

void solve(char str[])
{
    int len = strlen(str);
    int m = 0;
    for(int i = 1; i < len;i++)///对称中心为1个字符
    {
        m = 1;
        if(str[i-1]==str[i])
        {
            int j = i;
            while(str[j-m-1]==str[j+m]&&j-m-1>=0&&j+m<len)m++;
            if(m*2>cnt)cnt=m*2;

        }
    }
    m = 0;
    for(int i = 0; i< len; i++)///对称中心为两个字符
    {
        m = 1;
        int j = i;
        while(str[j-m]==str[j+m]&&j-m>=0&&j+m<len)m++;
        if(m*2-1>cnt)cnt=m*2-1;
    }
    cout<<cnt<<endl;
}

int main()
{
    scanf("%[^\n]",str);///字符串输入
    solve(str);

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值