题目描述:给定一个字符串,判断该字符串中的括号是否匹配
说明:在本题目中,只用到了这对”()“括号
分析:利用栈的机制,当遍历到的是"("时,入栈,遍历到")"时出栈,此前我们需要有一个flag变量记录是否匹配,如果发现有一个不匹配,则将flag置为false,并退出用于遍历的循环,要需要注意的一点是,整个字符串遍历结束后,栈中一定是没有任何数据的。
代码演示
class Test {
//随机生成括号字符串
public static String generateParenthesis(int length){//参数表示字符串长度
String s="";
Random r=new Random();
while (true) {
int random=(int)(r.nextInt(2)+1);//随机生成整数后将括号加入字符串
if (random == 1) {
s+="(";
}else{
s+=")";
}
if (s.length()==length){
break;
}
}
return s;//返回字符串
}
public static boolean isMatches(String s) {
//利用栈操作判断序列中的括号是否匹配
Stack<Character> stack = new Stack<>();
boolean flag = true;
//遍历整个字符串
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
//如果是(就入栈,栈中只存放(
stack.push('(');
} else if (s.charAt(i) == ')') {
if (stack.isEmpty()) {
//说明)比(多
flag = false;
} else {
//弹出(,如果最后栈空并且falg没有被修改过,则说明这个字符串匹配成功
stack.pop();
}
}
}
//把(比)多的数目考虑进去,就是要&&stack.isEmpty()
return flag && stack.isEmpty();
}
//测试代码
public static void main(String[] args) {
String s = generateParenthesis(4);
System.out.println(s);
System.out.println(isMatches(s));
}
}
核心代码
如果读者有更好的解决方法,欢迎在评论区分享!