解决思路
栈
使用一个栈作为辅助的空间
一旦遇到左方向的括号,就入栈。
一旦遇到右方向的括号
就出栈一个元素,看与当前的元素是否匹配
一直到字符串的末尾,到了末尾的时候判断栈中是否为空
对于弹出元素不匹配的情况,直接返回false
public boolean isValid(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{
//如果栈空 直接返回false
if(stack.isEmpty())
return false;
char c = stack.pop();
char match;
//判断应该match的字符
switch(s.charAt(i)){
case ']': match = '[';break;
case '}': match = '{';break;
default:match = '(';
}
//如果不匹配直接返回false
if(match != c)
return false;
}
}
//如果此时栈中还有元素 报错
if(stack.isEmpty())
return true;
return false;
}