给定一个字符串,只包含 ( , [ , { , ) , ] , } ,判定字符串中的括号匹配是否合法。
如 ”()” , “()[]{}” 是合法的
如 ”()” , “()[]{}” 是合法的
如 “(]”,”([)]” 是非法的
思路:使用栈解决
遍历字符串
如果是左括号,就入栈
否则,判断栈顶元素和当前元素是否匹配
代码:
class Solution {
public static boolean isValid(String s){
Stack 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{//否则,是右括号的话
//1. 栈如果为空,返回false
if(stack.isEmpty()){
return false;
}
//2. 弹出栈顶元素,看和右括号s.charAt(i)是否匹配,不匹配的话就返回false,可以用一个临时变量
char c = (Character) stack.pop();
char match = ' ';
if(s.charAt(i) == ')')
match = '(';
if(s.charAt(i) == ']')
match = '[';
if(s.charAt(i) == '}')
match = '{';
if(match != c){
return false;
}
}
}
//遍历结束,栈不为空的话,返回false
if(!stack.isEmpty()){
return false;
}
//返回true
return true;
}
}