import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class 平衡符号 {
/**
* 思路:
* 做一个空栈。读入字符直到文件结尾。
* 如果字符是一个左括号,则将其推入栈中。
* 如果是右括号,则当栈空时返回false。否则,将栈顶元素弹出。如果弹出的符号不是对应的左括号,则返回false。
* 在文件结尾,如果栈非空则返回false。
*
* 时间复杂度:O(N)
*
* @param s 表达式
* @return
*/
public static boolean isValid(String s) {
//用映射表示右括号对应的左括号
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
//用来存放左括号的栈
Stack<Character> stack = new Stack<>();
char c;
for(int i = 0; i < s.length(); i++) {
c = s.charAt(i);
//如果字符是一个左括号,则将其推入栈中。
if(c == '(' || c == '[' || c == '{') {
stack.push(c);
}else if(c == ')' || c == ']' || c == '}'){
//如果是右括号,则当栈空时报错。否则,将栈顶元素弹出。如果弹出的符号不是对应的左括号,则报错。
if(stack.isEmpty() || !stack.pop().equals(map.get(c))) {
return false;
}
}
}
//在文件结尾,如果栈非空则报错。
return stack.isEmpty();
}
}
括号配对
最新推荐文章于 2021-02-17 23:19:21 发布