java判断括号是否闭合_判断括号的合法性

以前看到的一个算法题,最近项目中用到,复习一下,还有点生疏了,记下来。

public class CheckBrackets {

public static void main(String[] args) {

String str = "()([{{}}])]";

System.out.println(bracketsValid(str));

}

/**

* 判断单种括号

* @return

*/

public static boolean bracketValid(String str){

char[] brackets = str.toCharArray();

// 待匹配的左括号数量

int left = 0;

for(char c : brackets){

if('(' == c){

left++;

}else {

left--;

}

if(left < 0){

return false;

}

}

return 0 == left;

}

/**

* 判断多种括号

* @return

*/

public static boolean bracketsValid(String str){

Stack left = new Stack<>();

char[] brackets = str.toCharArray();

for(char c : brackets){

// 左括号入栈

if('(' == c || '{' == c || '[' == c){

left.push(c);

}else {

// 右括号和栈顶元素匹配

if(!left.empty() && leftOf(c) == left.peek()){

left.pop();

}else {

return false;

}

}

}

// 所有元素匹配

return left.empty();

}

static char leftOf(char c){

if(')' == c){

return '(';

}

if('}' == c){

return '{';

}

return '[';

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值