#题外话(第41篇题解)(从现在到10月左右,我的文章会很少qwq)
#先看题目
题目链接https://www.luogu.com.cn/problem/P2799
#思路
①把字符串切为两半,比对其是否相等, 如果相等跳转至②,否则跳转至③
②将两半了的字符串赋给原来的字符串,之后跳转至①
③结束循环并输出
但是我们在实现的过程中就会发现,把①换成“依次从头和尾开始遍历,依次比对每个字符”更实用,更好理解,所以我做了更改。
同时,②也很难完成,所以转向另外一个方向:定义一个存储字符串长度的变量,把②的内容替换为其/=2,每次循环忽略掉后面的内容。
#代码
#include <bits/stdc++.h>
using namespace std;
string s="";int len,a,b;bool f=0;
int main(){
cin>>s;len=s.length();//len就是那个大名鼎鼎的变量……
while(1){
if(len%2==1)break;//如果长度是奇数,直接**吧……不可能的
for(int a=len/2-1,b=len/2;a>=0&&b<len;a--,b++){//循环依次从头和尾开始遍历,依次比对每个字符
if(s[a]!=s[b]){
f=1;
break;
}
}
if(f)break;//如果不一样,那也**
len/=2;//“二分”,准备下一次循环
}
cout<<len;
return 0;
}