Skip to content

Commit c89af33

Browse files
committed
Improved solution and code for the Valid Parentheses problem
1 parent be77a6a commit c89af33

File tree

2 files changed

+31
-24
lines changed

2 files changed

+31
-24
lines changed

valid-palindrome/KwonNayeon.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@
55
66
<Solution 1>
77
Time Complexity: O(n)
8-
-
8+
- 문자열 길이(n)에 비례함
9+
- 정규식 처리, 소문자 변환, 역순 비교 모두 O(n)
910
1011
Space Complexity: O(n)
11-
-
12+
- 변환된 문자열과 역순 문자열을 저장하는 공간이 필요함
1213
1314
풀이 방법:
14-
-
15+
- 문자열에서 알파벳과 숫자만 남기고 모두 소문자로 변환
16+
- 변환된 문자열과 그 역순이 같은지 비교
1517
"""
1618
class Solution:
1719
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()
1921
if s == s[::-1]:
2022
return True
2123
return False
@@ -28,7 +30,10 @@ def isPalindrome(self, s: str) -> bool:
2830
- left, right 포인터 외에 추가 공간 사용 없음
2931
3032
풀이 방법:
31-
-
33+
- 양쪽 끝에서 시작하는 두 포인터(left, right)를 활용한 방법
34+
- 알파벳/숫자가 아닌 문자는 건너뛰며 포인터 이동
35+
- 두 포인터가 가리키는 문자가 다르면 즉시 False 반환
36+
- 모든 비교가 일치하면 True 반환
3237
"""
3338
class Solution:
3439
def isPalindrome(self, s: str) -> bool:

valid-parentheses/KwonNayeon.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,30 @@
1212
- 따라서 입력 크기에 비례하는 O(n) 공간 필요
1313
1414
풀이방법:
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)
2521
"""
2622
class Solution:
2723
def isValid(self, s: str) -> bool:
2824
stack = []
29-
pairs = {')': '(', '}': '{', ']': '['}
30-
25+
26+
mapping = {')': '(', '}': '{', ']': '['}
27+
3128
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:
3631
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

0 commit comments

Comments
 (0)