使用hash表存储括号对应关系
使用栈结构判断括号是否对应
package com.example.suanfa.alg1;import java.util.Deque;import java.util.HashMap;import java.util.LinkedList;import java.util.Map;/*** @author lfy* @date 2022-05-22*/public class InvalidParentheses {/*** 有效的括号* @param s* @return*/public boolean isValid(String s) {int n = s.length();if (n%2 != 0){return false;}Map<Character,Character> pair = new HashMap<Character,Character>(){{put(')','(');put(']','[');put('}','{');}};Deque<Character> con = new LinkedList<>();for (int i = 0; i < n; i++) {char c = s.charAt(i);if (pair.containsKey(c)){if (con.isEmpty() || con.peek() != pair.get(c)){return false;}con.pop();}else {con.push(c);}}return con.isEmpty();}public static void main(String[] args) {String s = "(){}{[]";InvalidParentheses test = new InvalidParentheses();System.out.println(test.isValid(s));}}
复习
package com.alg.Three;
import java.util.*;
/**
* 有效的括号
*
* @author fuyao
* @date 2022年06月20日 4:43 下午
*/
public class ValidParentheses {
public boolean isValid(String s) {
int length = s.length();
if (length % 2 != 0) {
return false;
}
Map<Character, Character> contain = new HashMap<Character, Character>() {
{
put(')','(');
put(']','[');
put('}','{');
}
};
Deque<Character> deque = new LinkedList<>();
for (int i = 0; i < length; i++) {
if (contain.containsKey(s.charAt(i))){
if (deque.isEmpty() || deque.peek().equals(contain.get(s.charAt(i))) ){
return false;
}
deque.pop();
}else {
deque.push(s.charAt(i));
}
}
return deque.isEmpty();
}
}
