题目名字
国王的魔镜
题目链接
题意
给一串字符,求这个字符被反向加倍了几次
思路
- 用递归来实现,先判断长度,如果长度是奇数说明就没有被双倍,接下来就判断第一位和对应的末尾是否一样,一样就次数加一并且长度减半,直到不相等为止即可
算法一:XX+XX
时间复杂度
$
实现步骤
- 判断
- 递归
代码
#include<bits/stdc++.h>
using namespace std;
char a[100000];//存储字符
int ans=0;//记录次数
void fn(int r){
int mid=r/2;
if(r%2!=0){
count<<r;
return ;
}
else{
for(int i=0,j=r-1;i<mid;i++,j--){
if(a[i]!=a[j]){
cout<<r;
}
else{
ans++;
fn(mid);//再递归操作判断是否还会有解
}
}
}
int main(){
gets(a);输入这个字符串
char t;
int len=strlen(a);
fn(len);
return 0;
}