ABC381 B問題の解説(Python)

はじめに

こんにちは。てくますプロジェクトの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問題の解説でした!

では、またね。

リンク