题目描述
国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。
输入输出格式
输入:只有一个字符串,由大写英文字母组成(字母数<=100000),表示最终的项链。
输出:只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度。
本题可以使用C++string类模板来解决,非常方便呢QwQ。
所使用函数解释:
- str.size() 返回str的长度
- string str1(str,0,10)str1初始化为str从0至10的内容
- reverse()将字符串反转
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 using namespace std; 5 int main() 6 { 7 string str; 8 cin >> str; 9 while(str.size()%2==0&&str.size()!=0) 10 { 11 int mid = str.size()/2; 12 string str1(str,0,mid); 13 string str2(str,mid,str.size()); 14 reverse(str2.begin(),str2.end()); 15 if(str1 != str2) 16 break; 17 str = str1; 18 } 19 cout << str.size() << endl; 20 return 0; 21 } //自我感觉代码良好
注:string类可以直接使用=和==来赋值和判断
最后贴上题目链接