括号匹配问题,括号"(){} []"转为ASCII码进行计算匹配

在我练习Java中的Stack容器时,写了括号匹配问题,相信很多小伙伴都写过这个问题,
这里呢我的思路是将括号字符转为对应的ASCII码进行匹配问题的解决,例如"("与")"的ASCII码相差为1,而"["与"]"以及"{"与"}"的ASCII码都是相差为2

我自己练习的时候也是按正常匹配思路来的,和网上的大差不差,但是我又思考了一下有没有其他方法,于是我想另辟蹊径,我把关注点放到了ASSCI码上
我很少看到有人用数值进行匹配,所以写了这一篇,设计匹配的代码可能会繁琐也有错误,发现的话欢迎指出共同进步(目前我自己测试还可以)

点击查看代码
package gaoqi300.collection.List;

import java.util.Stack;

/**
 * 通过栈的后进先出,完成符号的匹配
 * 字符串:"...{.....[....(....)...]....}..(....)..[...]..."
 */

public class TestStack1 {
    public boolean symmetry(String str){
        boolean flag = true;
        Stack<String> stack = new Stack<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if(c == '{'){
                stack.push("{");
            }

            if(c == '['){
                stack.push("[");
            }

            if(c == '('){
                stack.push("(");
            }

            if(c == ')' || c == ']' || c == '}'){

                //这样的字符直接不匹配"}}]][])"
                if(stack.empty()){
                    flag = false;
                    break;
                }

               else{//实现括号转为ASCII码
                    if((int)c - (int)(stack.peek().charAt(0)) == 1 || (int)c - (int)(stack.peek().charAt(0)) == 2){
                        stack.pop();
                    }else {
                        break;
                    }
                }
            }


        }


        //如果末尾存在不匹配字符
        if(!stack.empty()){
            flag = false;
        }

        return flag;

    }

    public static void main(String[] args) {
        TestStack1 testStack1 = new TestStack1();
        System.out.println(testStack1.symmetry("[()]"));
    }
}

初始的时候我采用的是
if((int)c - Integer.parseInt(stack.peek()) == 1 || (int)c - Integer.parseInt(stack.peek()) == 2){ stack.pop(); }else { break; } }
但这里会报出 异常,Integer.paeseInt() 不能将"("这样的字符串转为数值,这里也给以后的小伙伴提个醒
可以用char类型过渡一下,java的String类的charAt()方法可以将字符串的指定位置转为字符,然后int类型强制转换即可

posted @ 2022-08-08 17:11  戏幕起  阅读(346)  评论(0编辑  收藏  举报
作者:Rainy-day-with-you
出处:https://www.cnblogs.com/Rainy-day-with-you/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
免责声明:
    本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除。
    原文作者:作者 原文地址:html地址