atcoder問題文
B - String Rotation /
実行時間制限: 2 sec / メモリ制限: 1024 MB
配点 :
200 点
問題文
英小文字からなる文字列 S, T が与えられます。
S を回転させて T に一致させられるか判定してください。
すなわち、以下の操作を任意の回数繰り返して S を T に一致させられるか判定してください。
制約
2≤∣S∣≤100
∣S∣=∣T∣
S,
T は英小文字からなる
入力
入力は以下の形式で標準入力から与えられる。
S T
出力
S を回転させて T に一致させられる場合は Yes、一致させられない場合は No を出力せよ。
回答
python.py
def strings_rotation(s: str, t: str) -> bool:
if s == t:
return True
t2 = t + t
rotation_find_index = t[1:].find(s[0]) + 1
if rotation_find_index == -1:
return False
for i in range(1, len(s)):
if s[i] != t2[i + rotation_find_index]:
return False
return True
s = input()
t = input()
if strings_rotation(s, t) or strings_rotation(t, s):
print("Yes")
else:
print("No")
回転させて一致するということはすべての回転させる文字の移動距離が同一になることになるのでその性質を利用して説くことができる。t2 = t + tのように文字列を結合しているのは末尾から先頭への移動する文字の比較を楽にするため。