File tree 2 files changed +31
-24
lines changed
2 files changed +31
-24
lines changed Original file line number Diff line number Diff line change 5
5
6
6
<Solution 1>
7
7
Time Complexity: O(n)
8
- -
8
+ - 문자열 길이(n)에 비례함
9
+ - 정규식 처리, 소문자 변환, 역순 비교 모두 O(n)
9
10
10
11
Space Complexity: O(n)
11
- -
12
+ - 변환된 문자열과 역순 문자열을 저장하는 공간이 필요함
12
13
13
14
풀이 방법:
14
- -
15
+ - 문자열에서 알파벳과 숫자만 남기고 모두 소문자로 변환
16
+ - 변환된 문자열과 그 역순이 같은지 비교
15
17
"""
16
18
class Solution :
17
19
def isPalindrome (self , s : str ) -> bool :
18
- s = re .sub (r'[^a-zA-z0 -9]' , '' , s ).lower ()
20
+ s = re .sub (r'[^a-zA-Z0 -9]' , '' , s ).lower ()
19
21
if s == s [::- 1 ]:
20
22
return True
21
23
return False
@@ -28,7 +30,10 @@ def isPalindrome(self, s: str) -> bool:
28
30
- left, right 포인터 외에 추가 공간 사용 없음
29
31
30
32
풀이 방법:
31
- -
33
+ - 양쪽 끝에서 시작하는 두 포인터(left, right)를 활용한 방법
34
+ - 알파벳/숫자가 아닌 문자는 건너뛰며 포인터 이동
35
+ - 두 포인터가 가리키는 문자가 다르면 즉시 False 반환
36
+ - 모든 비교가 일치하면 True 반환
32
37
"""
33
38
class Solution :
34
39
def isPalindrome (self , s : str ) -> bool :
Original file line number Diff line number Diff line change 12
12
- 따라서 입력 크기에 비례하는 O(n) 공간 필요
13
13
14
14
풀이방법:
15
- 1. 스택을 사용하여 여는 괄호('(', '{', '[')를 저장
16
- 2. Dictionary를 사용해 닫는 괄호와 여는 괄호의 쌍을 O(1)로 매칭
17
- 3. 문자열을 순회하면서:
18
- - 여는 괄호는 스택에 추가
19
- - 닫는 괄호가 나오면:
20
- a) 스택이 비어있거나
21
- b) 스택 최상단의 괄호가 현재 닫는 괄호와 매칭되지 않으면
22
- -> 잘못된 괄호 문자열
23
- - 매칭되는 경우 스택에서 pop
24
- 4. 모든 순회가 끝난 후 스택이 비어있어야 올바른 괄호 문자열
15
+ - key: 닫는 괄호, value: 대응하는 여는 괄호
16
+ - 현재 문자가 닫는 괄호인 경우
17
+ - 스택이 비어있다면(짝이 없음) -> False
18
+ - 스택에서 가장 최근에 추가된 여는 괄호를 꺼냄, 만약 대응하는 값이 아니라면 -> False
19
+ - 현재 문자가 여는 괄호인 경우 -> stack에 추가
20
+ - 모든 문자 처리 후, 스택이 비어있으면 모든 괄호의 짝이 맞음 (True)
25
21
"""
26
22
class Solution :
27
23
def isValid (self , s : str ) -> bool :
28
24
stack = []
29
- pairs = {')' : '(' , '}' : '{' , ']' : '[' }
30
-
25
+
26
+ mapping = {')' : '(' , '}' : '{' , ']' : '[' }
27
+
31
28
for char in s :
32
- if char in '({[' :
33
- stack .append (char )
34
- else :
35
- if not stack or stack [- 1 ] != pairs [char ]:
29
+ if char in mapping :
30
+ if not stack :
36
31
return False
37
- stack .pop ()
38
-
39
- return len (stack ) == 0
32
+
33
+ top = stack .pop ()
34
+
35
+ if mapping [char ] != top :
36
+ return False
37
+
38
+ else :
39
+ stack .append (char )
40
+
41
+ return not stack
You can’t perform that action at this time.
0 commit comments