Skip to content

Commit 4634265

Browse files
committed
#285 minimum-window-substring solution
1 parent 9b5e535 commit 4634265

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

minimum-window-substring/sungjinwi.py

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"""
2+
풀이 : 슬라이딩 윈도우 이용
3+
딕셔너리를 이용해 문자의 등장 빈도를 확인, 증가, 감소시킨다
4+
t에 존재하는 모든 문자의 빈도보다 s의 빈도가 같거나 커질 때까지 right를 증가시킨다
5+
left를 증가시키며 s[left]의 문자빈도가 t보다 낮아지는 지점을 찾는다
6+
기존의 min_total길이보다 짧으면 ans에 left, right 정보를 이용해 update
7+
8+
알고달레 참조 및 좀 더 최적화 필요
9+
10+
s의 길이 : n
11+
12+
"""
13+
14+
class Solution:
15+
def minWindow(self, s: str, t: str) -> str:
16+
left, right = 0, 0
17+
min_total = len(s)
18+
s_appear = {}
19+
t_appear = {}
20+
ans = ""
21+
for char in set(t):
22+
s_appear[char] = 0
23+
t_appear[char] = t.count(char)
24+
while (right < len(s)):
25+
if s[right] in s_appear:
26+
s_appear[s[right]] += 1
27+
if all(s_appear[char] >= t_appear[char] for char in t_appear.keys()):
28+
while left < right:
29+
if s[left] in s_appear:
30+
if s_appear[s[left]] == t_appear[s[left]]:
31+
break
32+
s_appear[s[left]] -= 1
33+
left += 1
34+
if (right - left + 1) < min_total:
35+
min_total = right - left + 2
36+
ans = s[left:right + 1]
37+
right += 1
38+
return ans

0 commit comments

Comments
 (0)