このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の文字列処理メニューから「回文判定 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
文字列 S が与えられるので、 S が回文かどうかを判定してください。
なお、回文とは、前から読んでも後ろから読んでも同じ文字列になるような文字列のことをいいます。
入力される値
1 |
S |
- 文字列 S が 1 行で与えられます。
期待する出力
S が回文である場合 "YES" を、そうでない場合は "NO" を出力してください。考え方
回文とは、言うまでもなく「ある文字列の前半と、後半を逆から読んだものが等しい文」のことである。
したがって、この考え方に沿って回文判定を行えば良い。
文字列の長さは String のプロパティである count を使えば求まる。前半と後半の逆順が等しいか否かを判定すれば良いので、切り取る長さは文字列長の半分となる。
ちなみに、文字列長は Int 型であり、2で割った場合にh端数が出ると切り捨てられるが、実際の回文では切り捨てられる部分ま回文の中央(偶数の場合は存在しない)ので気にする必要はない。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 |
let s = readLine()! // 文字列の長さの半分を求める let l = s.count // 前半 l 文字分を求める let prefix = s.prefix(l) // 後半 l 文字分を逆順にしたものを求める。 // reversed() の戻り値は ReversedElement<String> なので、String に変換する let suffix = String(s.suffix(l).reversed()) print(prefix == suffix ? "YES" : "NO") |