hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder 灰diff埋め ARC021~ARC040 振り返り

ARC035 A - 高橋くんと回文【AC】

 "*"という文字は任意の文字に置き換えられるとしたとき,Sは回文であるか求める問題です.
 SとSを反転した文字列を左から順に一文字ずつペアとして見ていきます.全ての文字のペアについて,同じ文字であるか"*"が含まれているとき,これは回文です.逆に文字が異なるかつどちらも"*"でない文字ペアが一つでもあったときこれは回文ではありません.
 SとSを反転した文字列について一文字ずつペアを作る過程でzip関数を使っています.これをfor文で使う事で複数のイテラブルオブジェクトを同時に取得することが出来ます.こうすることで,SとSを反転した文字列を一度に取得することが出来て便利です.
 これと同じ事は例えばfor i in range(len(S))としてs = S[i] r = S[::-i-1]としてもできます.

S = input()
for s, r in zip(S, S[::-1]):
    if s != r and "*" not in [s, r]:
        print("NO")
        break
else:
    print("YES")