gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

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;