英小文字だけからなる文字列 S が与えられます。S が回文(前から読んでも後ろから読んでも同じ並び)かどうかを判定してください。
例えば level は前から読んでも後ろから読んでも level なので回文です。hello は回文ではありません。
入力は以下の形式で標準入力から与えられます。
S
S が回文なら YES、そうでなければ NO を 1 行に出力してください。記号はすべて半角とします。
| 入力 | 出力 |
|---|---|
level | YES |
hello | NO |
「両端から中央へ」という、文字列処理の超定番テクニックを身につける問題です。
i と、右端を指す位置 j を用意するi 番目と j 番目の文字を比べる。違っていたら回文ではないi を 1 つ右へ、j を 1 つ左へ動かすi と j がすれ違うまで繰り返す。最後まで違いがなければ回文文字列を逆さまにして元と比べる方法でも解けますが、上の「両端から攻める」方法は無駄がなく応用も利きます。長さが 1 のときも回文になることに注意して、いろいろな例で試してみましょう。
下のエディタにコードを書き、「コンパイル・実行」で試し、「提出」で全テスト採点します。言語は C / C++ / Java から選べます。全テスト合格でこの問題はクリア(👑)です。
本番の編集・コンパイル・実行・採点は Exercode 上で行います。このページは予習・練習用です(実行は Wandbox の実コンパイラを利用)。