对称字符串的处理

Tyvj初学者题库,倒数第二题:Q1079:http://www.tyvj.cn/Open_Problem_Show.aspx?id=1079

描述 Description

某某国王(不是萨拉克门托..!)有一个神奇的魔镜,,,

它可以把东西变为原来的两倍..
(可惜是反的..)

某日,他感到很无聊,
于是把皇后的一串珠子变了不知道几次..

皇后回来之后不是很高兴,,
她还是喜欢原来那串珠子,,

现在告诉你改变之后珠子的形状,,
请你告诉她,原来的珠子是什么样子的..

输入格式 InputFormat

一行,一串字符,表示现在的珠串
长度小于100

输出格式 OutputFormat

一行,原来的珠串

样例输入 SampleInput [复制数据]

1232232112322321

样例输出 SampleOutput [复制数据]

1232

数据范围和注释 Hint

注意 若左右对称则保留左边的一节
也是水题一道,不过值得注意的是,做到什么时候停止呢?我一开始没想那么多,只是做到s不是回文串就停止了,wa了一次之后觉得不行呀,这个,还得加一个判断,就是当s的长度为奇数时也得停下来!因为魔镜变出来的字符串的长度一定都是偶数的,所以一旦是奇数就应该停止,然后输出!

果然,ac了,嘿!初学者题库差不多刷完了,主题库也有同时在做,不过进度没这边这么快,接下来我打算把《算法导论》好好看一下,因为大一这一年,虽然一开始就买了这本超级好的书,但是一直都是懵懵懂懂,现在感觉自己有能力来自学了!!!加油,分专题来学吧,动态规划,贪心,深搜和广搜,然后是数论和几何!先把这些都弄懂,同时坚持每天都来刷题,再忙也要挤出时间,大二可不能跟大一一样乱来了!!!

(⊙o⊙)…差点忘了贴代码:

#include <iostream>
#include <string>
using namespace std;

inline bool haha(string& s)
{
	int beg = 0, end = s.size() - 1;
	while(beg < end)
	{
		if(s[beg] != s[end]) return false;
		++beg;
		--end;	
	}
	return true;
}

int main()
{
	string s;
	cin >> s;
	while(haha(s)&&s.size()%2==0)
		s = s.substr(0,s.size()/2);
	cout << s << endl;
	return 0;
}


你可能感兴趣的:(对称的字符串)