括号匹配问题
转自黑马教程
问题描述:
给定一个字符串,里边可能包含“()”和其它字符,编写程序检查字符串中的小括号是否成对出现。
例如:
"(上海)(长安)":正确匹配
"上海((长安))":正确匹配
"上海(长安(北京)(深圳)南京):正确匹配
"上海(长安))":错误匹配
"((上海)长安":错误匹配
解题思路
利用栈来解决。遍历字符串,如果遇到"(",则将其压入栈中,如果遇到")",则做一个弹栈的动作,检查弹出的元素是否是"(",如果是则匹配成功,如果是null,则匹配错误。如果字符串遍历完,栈非空,则证明"("多,即括号不成对出现。
代码段
public class BracketsMatchTest{
public static void main (String[] args{
String str = "(上海(长安)())";
boolean match = isMatch(str);
System.out.println(str + "中的括号是否匹配" +match);
}
public static boolean isMatch(String str){
Stack<String> chars = new Stack<>();
for(int i =0;i<str.length;i++){
String currChar = str.charAt(i) + "";
if (currChar.equals("(")){
chars.push(currChar);
}else if(currChar.equals(")")){
String pop = chars.pop();
if (pop==null){
return false
}
}
}
if(chars.size() == 0){
return true;
}else{
return false;
}
}
}