yukicoder No.739 大事なことなので2度言います
解説
文字列を半分に切って、同じかどうか判定します。
文字列を抽出するsubstr(開始index, そこから何文字か)を利用すると簡単にかけます。
substr()の使用例は以下のような感じです。
string s="abcde"; cout<<s.substr(1,3)<<endl; //"bcd"が出力。s[1]から3文字分取る。
よって、この問題の解答は以下のようになります。
#include <iostream> #include <string> using namespace std; int main (){ string s; cin>>s; if(s.substr(0,s.size()/2)==s.substr(s.size()/2,s.size()/2))cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
他には、単純に1文字ずつ見ていく方法があります。
int main(){ string s;cin>>s; //文字列長が奇数ならそもそもNO if(s.size()%2==1){ cout<<"NO"<<endl; return 0; } //文字列を添字が0から、s.size()/2からの2つをスタート地点として、順番に比べる。1つでもダメならその時点でNO。 rep(i,0,s.size()/2){ if(s[i]!=s[i+s.size()/2]){ cout<<"NO"<<endl; return 0; } } cout<<"YES"<<endl; return 0;