对称字符串处理
目录
【题目描述】
某某国王(不是萨拉克门托!)有一个神奇的魔镜,它可以把东西变为原来的两倍(可惜是反的)。某日,他感到很无聊,于是把皇后的一串珠子变了不知道几次,皇后回来之后不是很高兴,她还是喜欢原来那串珠子,现在告诉你改变之后珠子的形状,请你告诉她,原来的珠子是什么样子的。
【输入】
输入有多组测试用例,每组一行,每行一串字符,表示现在的珠串,长度小于100。
【输出】
输出对应有多行,每行输出原来的珠串。
For example:
Input
Result
1232232112322321
121121
abba
1232
121
ab
Answer:(penalty regime: 20 %)
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
bool myfun(string &s)
{
int beg = 0;
int end = s.size()-1;
while(beg < end)
{
if(s[beg] != s[end])
{
return false;
}
beg++;
end--;
}
return true;
}
int main()
{
string s;
while(cin >> s)
{
while(myfun(s) && s.size()%2==0)
s = s.substr(0,s.size()/2);
cout << s << endl;
}
return 0;
}
搞了老久了妈的
没想到,c++的string字符串中的单个字符也可以通过s[]的形式来访问,发现了新大陆,感觉还是蛮方便的;
这题的算法很巧妙,当然不是我想出来的,参考https://blog.csdn.net/jacketinsysu/article/details/38335453;
t=s.substr(a,b)是将s中的从a开始的b个元素复制到t中;