题目
描述
给出一个仅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’]',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
分析
涉及到这种成对匹配的,且有先后顺序,直接就用栈来实现。
总体思路:左括号入栈,右括号出栈,最终看堆栈是否为空。
细节上,右括号时需要先检查堆栈是否为空,如果空的话,一定是非法括号。不为空,出栈时,栈顶和当前括号必须是匹配的,因为只有成对的才能消除,不成对的话,肯定不是合法的,比如([{]}) 这样。
代码实现
iimport java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
int n = s.length();
Stack<Character> stack = new Stack<Character>();
for(int i=0;i<n;i++) {
char c = s.charAt(i);
if(c == '(' || c == '[' || c== '{' ){
stack.push(c);
} else {
if(stack.isEmpty()) return false;
if(c== ')' && stack.peek() != '(') return false;
if(c==']' && stack.peek() != '[') return false;
if(c=='}' && stack.peek() != '{') return false;
stack.pop();
}
}
return stack.isEmpty();
}
}