括号匹配问题
利用栈的先进后出的特性,从左往右扫描字符串,如果遇到的是左括号即:‘{’,‘[’,‘(’,则入栈,如果遇到的是右括号即:‘)’,’]’,’}’,则取出栈顶元素,与当前字符串中遇到的括号进行比较,如果匹配,则栈顶元素出栈,继续扫描字符串,循环执行上述操作,如果到最后扫描字符串中的括号匹配完成,则检查此时栈是否已为空,如果为空,则括号完全匹配,如果不为空,则括号不匹配。如果扫描字符串中途遇到不匹配,则括号不匹配。
import java.util.Stack;
public class Solution {
public boolean isValid(String s){
Stack<Character> stack = new Stack<>();
for (int i=0;i<s.length();i++){ //扫描传入的字符串
char c = s.charAt(i);
if (c=='{'||c=='{'||c=='(') //如果扫描到的是左括号,则入栈
stack.push(c);
else //如果扫描到的不是左括号,则进行如下判断
if (stack.isEmpty()) //如果扫描到当前左括号前,栈内已为空,则不匹配
return false;
char topChar = stack.pop(); //将当前字符串中取到的括号与栈顶元素比较
if (c=='}' && topChar!='{')
return false;
if (c==']' && topChar!='[')
return false;
if (c==')' && topChar!='(')
return false;
}
//如果到最后传入字符串中的括号与栈内的括号匹配完成,且栈内正好为空,则匹配正确;
// 如果栈内不空,则匹配不正确
return stack.isEmpty();
}
}