string类的简单应用——国王的魔镜

 

题目描述

国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。

输入输出格式

输入:只有一个字符串,由大写英文字母组成(字母数<=100000),表示最终的项链。

输出:只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度。

 

 


 

本题可以使用C++string类模板来解决,非常方便呢QwQ。

 

所使用函数解释:

  1. str.size() 返回str的长度
  2. string str1(str,0,10)str1初始化为str从0至10的内容
  3. 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类可以直接使用=和==来赋值和判断

最后贴上题目链接

P2799 国王的魔镜 - 洛谷

猜你喜欢

转载自www.cnblogs.com/AThinker-/p/string.html