问题描述
给另一个字符串,里面可能包含“()”小括号和其他字符,请编写程序检查该字符串中的小括号是否成对出现。
例如:正确:(上海)(长安), (上海(北京(广东)))
错误:((上海)长安
解题思想
依次遍历字符串的每个字符,如果碰到左括号,将左括号压入栈中;如果碰见右括号需要先判断栈中是否还有元素,如果没有元素则说明没有左括号与该右括号匹配则返回false,否则弹出一个左括号。当所有字符都遍历完之后,如果栈为空则返回true,否则返回false。
代码实现
package test;
import linear.Stack;
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;
}
}
}