牛客网小A的回文串

//QQ:54573339

来源:牛客网
 

题目描述

小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的。所以小A只想知道给定的一个字符串的最大回文子串是多少,但是小A对这个结果并不是非常满意。现在小A可以对这个字符串做一些改动,他可以把这个字符串最前面的某一段连续的字符(不改变顺序)移动到原先字符串的末尾。那么请问小A通过这样的操作之后(也可以选择不移动)能够得到最大回文子串的长度是多少。
来源:牛客网
 

输入描述:

一行一个字符串表示给定的字符串S

示例1

输入

复制

dcbaabc

输出

复制

7

说明

将前面的dcba移动到末尾变成abcdcba,这个字符串的最大回文子串就是它本身,长度为7

 

这个题我的思路是将这个字符串扩展为原来的2倍;

然后就可以通过最简单的比对就OK了;当然大佬可以用动态规划,或者另一个定理(

https://www.jianshu.com/p/c82cada7e5b0),因为这个定理只是对回文串管用,所以我没太做深入的研究;

#include <iostream>
using namespace std;
#include <string>

int main()
{
	string s;
	cin>>s;
	s=s+s;
	int n=s.size()/2;
	int len=1;
	for(int i=0;i<n;i++)
	{
		for(int j=n+i-1;j>i;j--)
		{
			if(s[i]==s[j])
			{
				bool tf=false;
				for(int k=i,l=j;k<=l;k++,l--)
				{
					if(s[k]!=s[l])
					{
						tf=true;
						break;
					}
					
				}
				if(!tf)
				{
					len=max(len,j-i+1);
				}
			}
		}
	}
	cout<<len<<endl;
	return 0;
}

我感觉我这是最简单最粗暴的做法了;

如果哪里不对,希望大佬们指教一下;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值