728x90
반응형
https://leetcode.com/problems/valid-parentheses/
1. 여는 괄호가 있을 때와 없을 때로 구분하기
: 여는 괄호 있으면 현재 값을 확인해 여는 괄호와 맞는 닫는 괄호면 여는괄호 삭제
2. 그 외의 경우엔 넣기
3. 스택이 비었을 때 true 반환
import java.util.Stack;
public class Solution {
public static boolean isValid(String s) {
//open일때 close일 때
//모두 비었을 때 -> true;
int n = s.length();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < n; i++) {
System.out.println(i + " " +s.charAt(i)+" "+stack.size());
if (stack.isEmpty()) {
if (s.charAt(i) == '}' || s.charAt(i) == ')' || s.charAt(i) == ']') {
System.out.println(1);
return false;
}else{
stack.push(s.charAt(i));
System.out.println(3 + " " + stack.size()+" "+stack.peek());
}
}
else if(stack.peek() == '{' ||stack.peek() == '[' ||stack.peek()=='('){
System.out.println(i + " " + stack.size()+" "+stack.peek());
if (stack.peek() == '{' &&s.charAt(i) == '}' ) {
System.out.println(2);
stack.pop();
}
else if (stack.peek() == '[' && s.charAt(i) == ']' ) {
System.out.println(2);
stack.pop();
}
else if (stack.peek() == '('&&s.charAt(i) == ')') {
System.out.println(2);
stack.pop();
}else{
stack.push(s.charAt(i));
System.out.println(3 + " " + stack.size()+" "+stack.peek());
}
}
}
if (stack.isEmpty()) {
return true;
}
return false;
}
}
+) 세련된 풀이
1. 스택 이용
2. 스택 이용
3. Map과 스택 이용
import java.util.*;
public class ValidParentheses {
public boolean solve_1(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0; i<s.length(); i++) {
if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{')
stack.push(s.charAt(i));
else if(s.charAt(i) == ')' && !stack.empty() && stack.peek() == '(')
stack.pop();
else if(s.charAt(i) == ']' && !stack.empty() && stack.peek() == '[')
stack.pop();
else if(s.charAt(i) == '}' && !stack.empty() && stack.peek() == '{')
stack.pop();
else
return false;
}
return stack.empty();
}
}
public static boolean solve(String str) {
Stack<Character> stack = new Stack<>();
for(char c: str.toCharArray()) {
System.out.println("c: "+c);
if(c=='(') {
stack.push(')');
}else if(c=='[') {
stack.push(']');
}else if(c=='{') {
stack.push('}');
}else if(stack.isEmpty()|| stack.pop() != c) {
return false;
}
}
return stack.isEmpty();
}
public static boolean isValid_map(String str) {
Map<Character, Character> map = new HashMap<>();
map.put('{', '}');
map.put('(', ')');
map.put('[', ']');
Stack<Character> stack = new Stack<>();
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
if(map.containsKey(c)) {
stack.push(c);
}else if(map.containsValue(c)) {
if(!stack.isEmpty() && map.get(stack.peek())==c) {
stack.pop();
}else {
return false;
}
}
}
return stack.isEmpty();
}
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char c:s.toCharArray()){
if(c=='('||c=='{'||c=='['){
stack.push(c);
}else if(!stack.isEmpty()&&c==')' &&stack.peek()=='('){
stack.pop();
}else if(!stack.isEmpty()&&c=='}' &&stack.peek()=='{'){
stack.pop();
}else if(!stack.isEmpty()&&c==']' &&stack.peek()=='['){
stack.pop();
}else return false;
}
return stack.isEmpty()?true:false;
}
}
728x90
반응형
'Java > Java 알고리즘 LeetCode' 카테고리의 다른 글
[LeetCode- Ch7. DFS & BFS] 3. 섬의 최대 면적 (0) | 2022.10.31 |
---|---|
[LeetCode- Ch7. DFS & BFS] 1. 섬의 수 (0) | 2022.10.31 |
[LeetCode- Ch6. 큐와 스택] 1. 야구게임 ## (+ Switch, Integer.parseInt, Integer.valueOf) (0) | 2022.10.31 |
[LeetCode- Ch5. 연결 리스트] 1. 두 숫자 더하기 (0) | 2022.10.31 |
[LeetCode- Ch4. 투 포인터] 3. 문자열에서 모든 아나그램 찾기 (0) | 2022.10.31 |