CODE THANKS FES 2017(Parallel) B

問題概要

英小文字からなる文字列 S が与えられます。 S の後ろに英小文字からなる任意の文字列 T (空文字列も含む)を連結することで、回文にしたいです。 条件を満たす文字列 T のうち、 T の最小の長さを求めてください。

制約

  • 1 ≤ |S| ≤ 50
  • 文字列Sは英小文字からなる。

考えたこと

  • Sの後ろにTをくっつける時、Tの長さは、0≤|T|≤|S|-1となる。
  • Tの長さを上の制約に基づいて変化させた時に、回文かどうかを判定すれば良い。
  • その際に、つける文字列は substr()reverse() を活用すれば良い。(ここは復習ポイント)
#include<bits/stdc++.h>
using namespace std;

int main(){
  string s; cin >> s;
  int n = s.length();
  for(int i =0; i < n; i++) {
    string t = s.substr(0, i);
    reverse(t.begin(), t.end());
    t = s + t;
    string tt = t;
    reverse(tt.begin(), tt.end());
    if(t==tt) {
      cout << i << endl;
      return 0;
    }
  }

  return 0;
}