SRM428 DIV2 250 ThePalindrome

sの先頭からi文字をひっくり返したものをtとする。
sの末尾にtをつけたものが回文になってるかどうかを試していく。

例えば、s="abcccc" の場合
i=0:
 t="" (空文字列)
 s+t="abccc" ←回文じゃない
i=1:
 t="a"
 s+t="abccca" ←回文じゃない
i=2:
 t="ba"
 s+t="abcccba" ←回文!これの長さを返す

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

class ThePalindrome {
	bool ok(const string& s)
	{
		int n=s.size();
		for(int i=0;i<n/2;++i) if (s[i]!=s[n-i-1]) return false;
		return true;
	}
	public:
	int find(string s)
	{
		for(int i=0;i<s.size();++i) {
			string t=s.substr(0,i);   // 先頭からi文字を取り出して
			reverse(t.begin(),t.end()); // ひっくり返して
			t=s+t;                      // sの末尾にくっつける
			if (ok(t)) return t.size();
		}
		return 0;
	}
};