https://school.programmers.co.kr/learn/courses/30/lessons/131127
from collections import defaultdict
def solution(want, number, discount):
def check():
for key in want_d:
if key in d and d[key] >= want_d[key]:
pass
else:
return False
return True
answer = 0
d = defaultdict(int)
want_d = defaultdict(int)
for i in range(len(number)):
want_d[want[i]] = number[i]
#초기 윈도우 SET: 0~9 idx
for i in range(10):
d[discount[i]] += 1
if check():
answer += 1
for start in range(1, len(discount)-9):
end = start + 9
d[discount[start-1]] -= 1
d[discount[end]] += 1
if d[discount[start-1]] == 0:
del d[discount[start-1]]
if len(d) == len(want_d) and check():
answer += 1
return answer
[리트코드] 438. Find All Anagrams in a String 이 문제와 100% 일치한다. 윈도우 크기가 고정된 문제는 start를 for문의 변수로 사용하면 코드 작성하기 쉬워진다.
range()는 직접 print()를 찍어보면서 값을 조정했다.
for start in range(1, len(discount)-9):
end = start + 9
print(start, end, discount[start], discount[end]
>>print
1 10 apple pot
2 11 apple banana
3 12 banana apple
4 13 rice banana