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; }