File tree 2 files changed +36
-21
lines changed
2 files changed +36
-21
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
+ - 문자열 길이(n)에 비례함
9
+ - 정규식 처리, 소문자 변환, 역순 비교 모두 O(n)
8
10
9
11
Space Complexity: O(n)
12
+ - 변환된 문자열과 역순 문자열을 저장하는 공간이 필요함
13
+
14
+ 풀이 방법:
15
+ - 문자열에서 알파벳과 숫자만 남기고 모두 소문자로 변환
16
+ - 변환된 문자열과 그 역순이 같은지 비교
10
17
"""
11
18
class Solution :
12
19
def isPalindrome (self , s : str ) -> bool :
13
- s = re .sub (r'[^a-zA-z0 -9]' , '' , s ).lower ()
20
+ s = re .sub (r'[^a-zA-Z0 -9]' , '' , s ).lower ()
14
21
if s == s [::- 1 ]:
15
22
return True
16
23
return False
17
24
"""
18
25
<Solution 2>
19
26
Time Complexity: O(n)
20
- - 팰린드롬일 경우, 각 문자를 한 번씩 검사
27
+ - 팰린드롬일 경우, 각 문자를 한 번씩 검사함
21
28
22
29
Space Complexity: O(1)
23
30
- left, right 포인터 외에 추가 공간 사용 없음
31
+
32
+ 풀이 방법:
33
+ - 양쪽 끝에서 시작하는 두 포인터(left, right)를 활용한 방법
34
+ - 알파벳/숫자가 아닌 문자는 건너뛰며 포인터 이동
35
+ - 두 포인터가 가리키는 문자가 다르면 즉시 False 반환
36
+ - 모든 비교가 일치하면 True 반환
24
37
"""
25
38
class Solution :
26
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