AtCoder ABC 221 B – typo Python解説

スポンサーリンク

typo

文字列 S, T が与えられます。以下の操作を高々 1 回行うことで、S を T と一致させることができるかを判定してください。
S の隣り合う 2 文字を選び、入れ替える。
なお、上記の操作を一度も行わないことも可能です。

AtCoder Beginner Contest「typo」

文字列Sの隣り合う2文字を入れ替えて文字列Tと一致するかを判定する。今回の問題では、入れ替え操作を行う前に文字列が一致している場合があるので、操作をする前にSとTが一致しているかを調べた方がよい。

入れ替え操作は文字列Sの先頭から順に2文字ずつ入れ替えていき、Tと一致した場合flagをTrueにして判定します。

s = list(input())
t = list(input())

flag = False

if s == t:
    flag = True
    
for i in range(len(s) - 1):
    s[i], s[i+1] = s[i+1], s[i]
    if s == t:
        flag = True
        break
    s[i], s[i+1] = s[i+1], s[i]
    
print("Yes" if flag else "No")

for文を使って入れ替え操作をしていきます。入れ替え操作は2文字使うので、for文は1回少ないlen(s)-1までのループになります。入れ替え方法はs[i], s[i+1] = s[i+1], s[i]とすることで文字を入れ替えています。文字列のままだと入れ替えできないので、リストで受け取るようにしましょう。

そして、SとTが一致するかを確認。一致すればflagをTrueにして終了。一致しなかった場合は次の入れ替え操作の為に入れ替えた文字を再度戻します。

最後にflagがTrueの場合はYes、Falseの場合はNoを出力して完了です。

AtCoderB問題

Posted by cheese