AtCoder ABC 032 B – 高橋君とパスワード Python解説

スポンサーリンク

高橋君とパスワード

高橋君の会社には、秘密の金庫があります。この金庫にはパスワードをかけているのですが、高橋君はそのパスワードを忘れてしまいました。 しかし、幸運なことに、手元にはパスワードのヒントが以下のように書かれていました。

パスワードは、この紙に書かれている文字列 s の長さ k の部分文字列のどれかである。

高橋君は、ありうるパスワードを全部試せば金庫を開けられる!と喜びました。 しかし、文字列 s はとても長い可能性があるし、しかも同じ部分文字列が複数個文字列 s 中に存在する可能性もあります。明らかに、重複したパスワードを繰り返し試す必要はありません。 そこで、手動で全てのパスワードを試す前に、試す必要がある異なるパスワードの数がいくつあるかを数えることにしました。

あなたの仕事は、文字列 s の内容が与えられるので、試す必要がある異なるパスワードの数がいくつあるかを高橋君に教えてあげることです。

AtCoder Beginner Contest 032 「高橋君とパスワード」

文字列Sとパスワードの長さKが与えられるので、試す必要があるパスワード、つまり重複していない部分文字列の数を答える問題。

方針としては、文字列Sから長さKの部分文字列を配列に追加していき、最後に重複した要素を削除していこうと思います。

s = input()
k = int(input())

password = []

for i in range(len(s) - k + 1):
    word = s[i: i + k]
    password.append(word)
    
print(len(set(password)))

上記のコードでは、スライスを使い文字列Sから長さKの部分文字列を取得しています。取得した部分文字列は、配列passwordに追加し、最後にsetとlen関数で重複のない要素数を