括号匹配-java语言版

301 阅读2分钟

-- 问题描述:

给定一个字符串,里边可能包含"()"小括号和其他字符,请编写程序检查该字符串的中的小括号是否成对出现。 

例如: "(上海)(长安)":正确匹配 
"上海((长安))":正确匹配 
"上海(长安(北京)(深圳)南京)":正确匹配
"上海(长安))":错误匹配
"((上海)长安":错误匹配

-- 分析:

1.创建一个栈用来存储左括号 
2.从左往右遍历字符串,拿到每一个字符 
3.判断该字符是不是左括号,如果是,放入栈中存储 
4.判断该字符是不是右括号,如果不是,继续下一次循环 
5.如果该字符是右括号,则从栈中弹出一个元素t; 
6.判断元素t是否为null,如果不是,则证明有对应的左括号,如果不是,则证明没有对应的左括号 
7.循环结束后,判断栈中还有没有剩余的左括号,如果有,则不匹配,如果没有,则匹配

-- 代码:

public class BracketsMatch {
    public static void main(String[] args) {
        String str = "(fdafds(fafds)())";
        boolean match = isMatch(str);
        System.out.println(str + "中的括号是否匹配:" + match);
    }
    /**
     * 判断str中的括号是否匹配
     *
     * @param str 括号组成的字符串
     * @return 如果匹配,返回true,如果不匹配,返回false
     */
    public static boolean isMatch(String str) {
       // 创建一个栈存储左括号
        Stack<String> chars = new Stack<>();
        // 从左往后遍历字符串
        for(int i = 0;i < str.length();i++) {
            // 拿到一个字符将其转换为字符串
            String currChar = str.charAt(i) + "";
            if(currChar.equals("(")) {
                // 如果是左括号,将其加入栈中
                chars.push(currChar);
            }else if(currChar.equals(")")) {
                // 如果是右括号,从栈中弹出一个左括号
                String t = chars.pop();
                // 如果t为null,说明没有与之匹配的左括号
                if(t == null) {
                    return false;
                }
            }
        }
        // 循环结束后,如果栈中为空则说明匹配,如果不为空说明不匹配
        return chars.isEmpty() ? true : false;
    }
}

-- 运行效果图:

括号运行效果图.png

@ 以上内容属于个人笔记