AtCoder ABC 159 B – String Palindrome Python解説

スポンサーリンク

String Palindrome

長さが奇数である文字列 S が以下の条件をすべて満たすとき、S は「強い回文」であるといいます。

S は回文である。
N を S の長さとするとき、S の 1 文字目から (N−1)/2 文字目まで(両端含む)からなる文字列は回文である。
S の (N+3)/2 文字目から N 文字目まで(両端含む)からなる文字列は回文である。

S が強い回文かどうかを判定してください。

AtCoder Beginner Contest 「String Palindrome」

強い回文になる条件は、文字列Sが回文、Sの1文字目から(N-1)/2文字目までが回文、Sの(N+3)/2文字目からN文字目までが回文、を満たしたときです。
ただし、文字列Sが回文であれば、Sの1文字目から(N-1)/2と(N+3)/2からN文字目までの条件は、どちらか一方を確認すれば大丈夫です。

s = input()
n = len(s)

half = (n - 1) // 2

if s == s[::-1] and s[:half] == s[:half][::-1]:
    print("Yes")
else:
    print("No")

(N-1)/2を変数halfに入れています。あとは、スライスを使って文字列が回文になっているか判定していきましょう。

AtCoderB問題

Posted by cheese