Skip to content

Commit 098cfe9

Browse files
authored
Merge pull request #1434 from KwonNayeon/main
2 parents 826eb07 + c89af33 commit 098cfe9

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

valid-palindrome/KwonNayeon.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,35 @@
55
66
<Solution 1>
77
Time Complexity: O(n)
8+
- 문자열 길이(n)에 비례함
9+
- 정규식 처리, 소문자 변환, 역순 비교 모두 O(n)
810
911
Space Complexity: O(n)
12+
- 변환된 문자열과 역순 문자열을 저장하는 공간이 필요함
13+
14+
풀이 방법:
15+
- 문자열에서 알파벳과 숫자만 남기고 모두 소문자로 변환
16+
- 변환된 문자열과 그 역순이 같은지 비교
1017
"""
1118
class Solution:
1219
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()
1421
if s == s[::-1]:
1522
return True
1623
return False
1724
"""
1825
<Solution 2>
1926
Time Complexity: O(n)
20-
- 팰린드롬일 경우, 각 문자를 한 번씩 검사
27+
- 팰린드롬일 경우, 각 문자를 한 번씩 검사함
2128
2229
Space Complexity: O(1)
2330
- left, right 포인터 외에 추가 공간 사용 없음
31+
32+
풀이 방법:
33+
- 양쪽 끝에서 시작하는 두 포인터(left, right)를 활용한 방법
34+
- 알파벳/숫자가 아닌 문자는 건너뛰며 포인터 이동
35+
- 두 포인터가 가리키는 문자가 다르면 즉시 False 반환
36+
- 모든 비교가 일치하면 True 반환
2437
"""
2538
class Solution:
2639
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)