日鉄ソリューションズプログラミングコンテスト2023(AtCoder Beginner Contest 303)の解説記事です。
目次
ABC303 A – Similar String
問題
問題文の要約は以下の通りです。
問題の要約
長さ\(N\) の文字列 \(S , T\) が似た文字列か判定せよ。似た文字列とは \(S , T\) の \(i\) 文字目が次のいずれかの場合のことである。
・同じ文字
・一方が1
で、もう一方がl
・一方が0
で、もう一方がo
制約
・\(N\) は1以上100以下の整数
・\(S , T\) は英小文字及び数字からなる長さ \(N\) の文字列
入力
\(N\)
\(S\)
\(T\)
出力
\(S\) と\(T\) が似た文字列の場合 Yes
を、そうでない場合 No
を出力せよ。
解説1
1文字ずつ似た文字の条件にあてはまるか判定する。
解説
まず入力を \(N\) , \(S\) , \(T\) を受け取ります。
N=int(input())
S=input()
T=input()
\(i\) 文字目が似た文字かどうか判定するために \(N\) 文字目までfor
文でループさせます。
for i in range(N):
\(i\) 文字目が似た文字ではないときにNo
を出力します。
if not(S[i]==T[i]
or (S[i]=='1' and T[i]=='l')
or (S[i]=='o' and T[i]=='0')
or (S[i]=='l' and T[i]=='1')
or (S[i]=='0' and T[i]=='o')):
print('No')
exit()
すべてが似た文字の時はYes
を出力します。
print('Yes')
解答
N=int(input())
S=input()
T=input()
for i in range(N):
if not(S[i]==T[i]
or (S[i]=='1' and T[i]=='l')
or (S[i]=='o' and T[i]=='0')
or (S[i]=='l' and T[i]=='1')
or (S[i]=='0' and T[i]=='o')):
print('No')
exit()
print('Yes')
解説2
似た文字をreplace
して同じ文字列になるかどうかで判定する。
解説
0
をo
に、1
をl
にreplace
します。
S=input().replace("0", "o").replace("1", "l")
T=input().replace("0", "o").replace("1", "l")
\(S\) と \(T\) が一致したらYes
を一致しなければNo
を出力します。
if S==T:
print('Yes')
else:
print('No')
解答
N=int(input())
S=input().replace("0", "o").replace("1", "l")
T=input().replace("0", "o").replace("1", "l")
if S==T:
print('Yes')
else:
print('No')