问题描述:判断括号配对是否正确 ,例如:()[]{} 都是正确的配对方式。而(}())}是错误的
解决方案:运用堆栈进行求解。首先运用Map记录下符号的配对方式,其次如果遇到左括号则直接入栈,若果是右括号,则弹出栈顶元素,与当前要加入的字符进行配对,若配对不成功,则返回false,若成功配对则一直重复上述步骤,知道所有的括号都配对,检查栈中是否存留括号,没有的话说明完全匹配,返回true,有的话只能说明部分匹配,返回false。
实现代码:
- /**
- * 判断括号配对是否正确
- * 例如:()[]{} 都完事正确的配对方式。而(}())}是错误的
- *
- * @author 咯还长
- *
- */
- public class Main {
- public static void main(String[] args) {
- boolean flag = false;
- Scanner scanner=new Scanner(System.in);
- String b=scanner.nextLine();
- char[] c=b.toCharArray();
- Map<Character,Character>map=new HashMap<>();
- map.put(')', '(');
- map.put('}', '{');
- map.put(']', '[');
- Stack<Character>s=new Stack<>();
- for(int i=0,len=c.length;i<len;i++){
- if(!map.containsKey(c[i])){
- //右括号
- s.push(c[i]);
- }
- else{
- //左括号检查是否和栈顶配对
- if(!map.get(c[i]).equals(s.pop())){
- //不匹配跳出循环
- break;
- }
- }
- }
- if(s.isEmpty()){flag=true;}
- System.out.println(flag);
- }
- }