括号匹配:简而言之是每一个右括号都有唯一的左括号与其对应。
例如(上海(北京)(深圳)杭州)括号是匹配的,
而
上海(北京)(深圳)杭州)
(上海(北京)(深圳)杭州
((上海(北京)(深圳)杭州)
是不匹配的。
判断原理:
当遇到左括号时就把左括号进栈,遇到右括号时就出栈,因为最后进栈的一个左括号,一定会与第一个出现的右括号配对
步骤:
1.遍历带括号字符串的每一个字符
2.如果字符是左括号,则进栈,遍历下一个字符
3.继续判断字符,如果是右括号则出栈
4.判断出栈的内容是否为空,如果是,则证明没有配对的左括号
5.当遍历完字符串后,判断栈是否有多余的左括号,如果有,则说明栈内的左括号没有对应的右括号,字符串括号不匹配
代码:
public class BracketMatchTest {
public static void main(String[] args) {
String str="(上海(北京)(深圳)杭州)";
System.out.println("字符串括号匹配:"+isMatch(str));
}
public static boolean isMatch(String str) {
Stack stack = new Stack<>();
//遍历字符串,获取单个字符
for (int i = 0; i < str.length(); i++) {
String chars = str.charAt(i) + "";
//判断当前字符是否是左括号,如果是则进栈,不是则遍历到下一个字符
if ("(".equals(chars)) {
stack.push(chars);
}
//继续判断当前字符是否是右括号,如果是则出栈一个元素,判断出栈元素是否是null,如果是null,说明没有对应的左括号,如果不是,说明有对应的左括号
else if (")".equals(chars)) {
String pop = stack.pop();
if (pop == null) {
return false;
}
}
}
//当字符串遍历结束后,判断栈中有没有多余的括号,如果有,证明不匹配,如果没有,则证明括号是匹配的
if (stack.size() != 0) {
return false;
}
else{
return true;
}
}
}
结果:



