File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed
longest-substring-without-repeating-characters Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ """
2
+ sliding window 풀이:
3
+ 알고달레 풀이 참조할 것
4
+ start부터 end까지의 부분문자열 길이가 유기적으로 변하면서 이동하여 탐색
5
+ s[end]가 set에 존재하지 않으면 s[end] set에 추가하고 ans와 대소비교로 업데이트, end + 1 -> 부분문자열 크기 증가
6
+ s[end]가 set에 존재하면 s[start] set에서 제거하고 start + 1 -> s[end]와 같은 문자가 set에 없을 때까지 부분문자열 크기 감소
7
+
8
+ TC : O(N)
9
+ 문자열 한번만 순회하고 set의 조회, 추가, 삭제는 O(1)이므로
10
+ SC : O(N)
11
+ 문자열 길이와 set의 크기가 비례
12
+ """
13
+ class Solution :
14
+ def lengthOfLongestSubstring (self , s : str ) -> int :
15
+ ans = 0
16
+ start , end = 0 , 0
17
+ chars = set ()
18
+ while end < len (s ) :
19
+ if not s [end ] in chars :
20
+ chars .add (s [end ])
21
+ ans = max (ans , end - start + 1 )
22
+ end += 1
23
+ else :
24
+ chars .remove (s [start ])
25
+ start += 1
26
+ return ans
27
+
28
+ """
29
+ 기존 풀이 :
30
+ 각 문자를 start로 순회하는 내부에서
31
+ 새로 추가되는 end 문자와 기존 문자열을 중복검사해서 길이를 늘려나가다가 중복되면 break
32
+
33
+ TC : O(N^2)
34
+ SC : O(N)
35
+
36
+ class Solution:
37
+ def lengthOfLongestSubstring(self, s: str) -> int:
38
+ ans = 0
39
+ dp = [1] * len(s)
40
+ for start in range(len(s)):
41
+ chars = set()
42
+ for end in range(start, len(s)) :
43
+ if not s[end] in chars :
44
+ chars.add(s[end])
45
+ ans = max(ans, end - start + 1)
46
+ else :
47
+ break
48
+ return ans
49
+ """
You can’t perform that action at this time.
0 commit comments