目次
はじめに
こんにちは。てくますプロジェクトのYukkinです! この記事では、ABC381のB問題を解説していきます。
ABC(AtCoder Beginner Contest)とは、AtCoderが開催している、競技プログラミングコンテストです。
ABC381 B – 1122 String
問題
文字列 \(T\) が以下の条件を全て満たすとき、\(T\) を 1122 文字列 と呼びます。
- \(T\) の文字数は偶数である
- \(T\) の \(2i-1\) 文字目と \(2i\) 文字目は等しい
- \(T\) に含まれる文字は \(T\) にちょうど 2 回ずつ登場する
英小文字からなる文字列 \(S\) が与えられます。\(S\) が 11/22 文字列であるか判定してください。
制約
- \(1 \leqq len(S) \leqq 100\)
思考の筋道
A問題同様、問題文の条件通りに素直に実装しましょう。
\(N\) が奇数のときは “No” を出力します。
\(N\) が偶数のときは、\(2i-1\) 文字目と \(2i\) 文字目は等しいかどうかをそれぞれ調べましょう。また、3つ目の条件から、一度ペアで登場した文字は他の箇所で登場してはいけません。これについては集合を使って、これまでに登場した文字を管理しておくことで、調べるとよいでしょう。
どこかで条件に反していれば、その時点で “No” を出力します。
最後まで “No” にならなければ、”Yes” を出力しましょう。
コード
S = input()
if len(S) % 2 == 1:
print("No")
exit()
s = set()
for i in range(len(S) // 2):
if S[2 * i] != S[2 * i + 1] or S[2 * i] in s:
print("No")
exit()
s.add(S[2 * i])
print("Yes")
以上、ABC381のB問題の解説でした!
では、またね。
コメントを書く