考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC032-B - 高橋君とパスワード を解く

ABC032-B - 高橋君とパスワード

 

文字列 s と長さ k が与えられるので

文字列 s から長さ k の(連続する)部分文字列は何通りあるか答える問題

 

s の長さは300以下と、緩い制約なので全部列挙してしまおう

最後に重複を取り除いて、個数を数えればいい

 

重複除去のためには set を使用する

(参考:ABC009-B - 心配性な富豪、ファミリーレストランに行く。 を解く

 

提出したコード

# 入力
s=input()
k=int(input())

l=[]

for i in range(len(s)-k+1):
  l.append(s[i:i+k])

# 出力
print(len(set(l)))

 

全部列挙するための記法には少し注意が必要

どう書けばいいか迷ったときには、簡単な具体例を考えて

実験してみるといい

 

例えば s="abcde"、k=3 の場合は

連続する部分文字列は "abc", "bcd", "cde" となる

リストのスライスでこのように切り出すにはどのように指定すれば良いか…

>>> s='abcde'
>>> s[0:3]
'abc'
>>> s[1:4]
'bcd'
>>> s[2:5]
'cde'

実験を行うと上記のような感じで指定していけばよいことがわかる

何度か実験を繰り返すことで任意の文字列に対しても

処理が可能なコードを書くことができるようになるはず

 

提出結果はACでした