日刊競プロ ABC 232 -B - Caesar Cipher-
問題文
高橋君は英小文字からなる文字列 S を持っています。
高橋君は文字列 S に対して、下記の操作をちょうど 1 回行います。
まず、非負整数 K を選ぶ。
その後、S の各文字を K 個後ろの英小文字に変更する。
ただし、
a の 1 個後ろの英小文字は b であり、
b の 1 個後ろの英小文字は c であり、
c の 1 個後ろの英小文字は d であり、
⋯
y の 1 個後ろの英小文字は z であり、
z の 1 個後ろの英小文字は a です。
例えば、b の 4 個後ろの英小文字は f であり、y の 3 個後ろの英小文字は b です。
文字列 T が与えられます。 高橋君が上記の操作によって S を T に一致させることができるかを判定してください。
制約
S と T はそれぞれ英小文字からなる長さ 1 以上 10**5以下の文字列
S の長さと T の長さは等しい
考えたこと
はじめにabcの文字順の辞書を作ってしまい,アルファベット同士を弾いたときに差が計算できるようにする.差が負の数だった時はアルファベットの数である26を足して,26-N個進んだとすれば良い.(例えばc→aのときは差が1-3=-2になるが,26を足して24個進んだと考えれば良い.)
ori = 'abcdefghijklmnopqrstuvwxyz'
d = {}
S = input()
T = input()
for i in range(len(ori)):
d[ori[i]]=i+1
#print (d)
ans =[]
for i in range(len(S)):
temp = d[T[i]]-d[S[i]]
#print (temp)
if temp<0:
temp = temp+26
ans.append(temp)
#print (ans)
if len(list(set(ans))) ==1:
print ('Yes')
else:
print ('No')
この記事が気に入ったらサポートをしてみませんか?