-
[stack] valid parenthesesAlgorithm/LeetCode 2025. 3. 23. 11:09
✅ Problem
https://leetcode.com/problems/valid-parentheses/description/
✅ Approach & Solution
방식1) Deque 인터페이스 사용한 Stack 구현
더보기플로우
- (, {, [ : stack push
- ), }, ] : stack pop
- 빈 스택인 경우 : not valid
- 대응하는 open bracket이 아닌 경우 : not valid
- 빈 스택이 아닌 경우 : not valid
class Solution { public boolean isValid(String s) { Deque<Character> stack = new ArrayDeque<>(); boolean result = true; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(' || c == '{' || c == '[') { stack.push(c); } else { if (stack.isEmpty()) { result = false; break; } char top = stack.pop(); if (c == ')' && top != '(' || c == '}' && top != '{' || c == ']' && top != '[') { result = false; break; } } } if (!stack.isEmpty()) { result = false; } return result; } }
방식2) Array 사용한 Stack 구현
더보기배열로만 처리한다면?
- 시작 index = -1
- index == -1 이면, 빈 스택
- open bracket인 경우 대응하는 close bracket을 배열에 저장
- close bracket인 경우 배열에 존재하는 값이 본인과 일치하면 valid, 일치하지 않으면 not valid
class Solution { public boolean isValid(String s) { int top = -1; char[] bracketArr = new char[s.length()]; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(') { bracketArr[++top] = ')'; } else if (c == '{') { bracketArr[++top] = '}'; } else if (c == '[') { bracketArr[++top] = ']'; } else { if (top == -1) { return false; } else { if (bracketArr[top--] != c) { return false; } } } } return top == -1; // if stack is not emtpy, not valid } }
'Algorithm > LeetCode' 카테고리의 다른 글
[array] maximum product subarray (0) 2025.04.06 [array] 3sum closest (0) 2025.04.05 [array] container with most water (0) 2025.03.22 [string] most common word (0) 2025.03.09 [string] reorder data in log files (0) 2025.03.09