括号配对问题 java_括号配对问题JAVA实现

1. 括号匹配的四种可能性:

①左右括号配对次序不正确

②右括号多于左括号

③左括号多于右括号

④左右括号匹配正确

2. 算法思想:

1.顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;

2.当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;

3.若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确,匹配失败,直接退出;

4.若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号,匹配失败,直接退出;

5.字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号,匹配失败;

6.正常结束则括号匹配正确。

package N2;

import java.util.*;

public class Test2 {

public static void main(String[] args) throws Exception {

Scanner input = new Scanner(System.in);

int num = input.nextInt();

String[] str = new String[num];

for (int i = 0; i < num; i++) {

str[i] = input.next();

}

for (int i = 0; i < num; i++) {

if (matchInfo(str[i]) == true)

System.out.println("YES\n");

else

System.out.println("NO\n");

}

}

public static boolean matchInfo(String str)

{

Stack stack = new Stack();

char[] ca = str.toCharArray();

if(((Character) ca[0]) == '[' || ((Character) ca[0]) == '(')

{

for (int index = 0; index < str.length(); index++)

{

Character c1 = (Character) ca[index];

if((c1 == '(') || (c1 == '['))

{

stack.push(c1);

}

else if (stack.empty()==true)

{

return false;

}

else if((c1 == ')') || (c1 == ']'))

{

if(((((Character) stack.peek()) == '(')&& (c1 == ')'))||((((Character) stack.peek()) == '[')&& (c1 == ']')))

{

stack.pop();

}

else return false;

}

}

return stack.empty();

}

else return false;

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值