Valid Parentheses
LeetCode 20. Valid Parentheses
원문
Given a string s
containing just the characters '('
, ')'
, '{'
,'}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
- Every close bracket has a corresponding open bracket of the same type.
풀이
- 문자열을 순회한다.
- 문자가 여는 괄호인 경우 스택에 넣는다.
- 문자가 닫는 괄호인 경우
- 스택이 비어 있으면
False
를 반환한다. - 스택의 마지막 원소가 짝이 맞는 여는 괄호가 아니면
False
를 반환한다. - 맞으면
.pop()
- 스택이 비어 있으면
- 순회가 끝났을 때 스택이 비어있지 않으면
False
를 반환한다. - 비어있으면
True
를 반환한다.
코드
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def isValid(self, s: str) -> bool:
couple = {')': '(', '}': '{', ']': '['}
stack = list()
for element in s:
if element in '({[':
stack.append(element)
elif not stack: break
else:
if stack[-1] != couple[element]: break
stack.pop()
else:
if stack: return False
return True
return False
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.ArrayList;
class Solution {
public boolean isValid(String s) {
ArrayList<Character> stack = new ArrayList<>();
HashMap<Character, Character> parentheses = new HashMap<>();
parentheses.put(')', '(');
parentheses.put('}', '{');
parentheses.put(']', '[');
for (int i = 0; i < s.length(); i++) {
if (parentheses.containsValue(s.charAt(i))) {
stack.add(s.charAt(i));
} else {
if (!stack.isEmpty() && stack.get(stack.size() - 1) == parentheses.get(s.charAt(i))) {
stack.remove(stack.size() - 1);
} else {
return false;
}
}
}
if (stack.isEmpty()) {
return true;
}
return false;
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.