スタックeasying

著作権:著者:xp_9512出典:CSDN著作権:この記事はブロガーオリジナル記事です、ボーエンのリンクを添付してください再現!オリジナル:https://blog.csdn.net/qq_40981804/article/details/91360281

効果的なブラケット

  • タイトル

のみ与えられた '('、 ')' の文字列を含む、 '{'、 '}'、 '['、 ']'、文字列が有効であるかどうかを決定します。

有効な文字列を満たしている必要があります。

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

空の文字列が有効な文字列と考えることができます。

例1:

入力: "()" 出力:真

例2:

入力: "()[] {}" 出力:真

例3:

入力: "(]" 出力:偽

例4:

入力: "([)]" 出力:偽

例5:

入力: "{[]}" 出力:真

  • アイデア
    スタックのプロパティを使用しては、ブラケットを左出会い後に進んで、スタックにプッシュされる右括弧は、最上位の要素との一致が発生している、マッチが成功した場合には、最上位の要素をポップアップ表示されます、それ以外の場合はfalseを返します。
  • ケース
class Solution {
    //用于比较的函数
    private HashMap<Character,Character> mapping;
    public Solution(){
        this.mapping = new HashMap<>();
        this.mapping.put(')','(');
        this.mapping.put(']','[');
        this.mapping.put('}','{');
    }
    //比较函数
    public boolean isValid(String s) {
        //初始化一个栈 ,备用
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i < s.length(); i++){
            //获得字符串中的第一个字符
            char c = s.charAt(i);
            //如果当前字符是以括号结尾 则获取栈顶元素
            if(this.mapping.containsKey(c)){
                // 获取堆栈的顶部元素。如果堆栈为空,请设置虚拟值“#”
                char topElement = stack.empty() ? '#' : stack.pop();
                //如果此括号的映射与堆栈的top元素不匹配,则返回false。
                if (topElement != this.mapping.get(c)) {
                    return false;
                }
            }else {
                // 否则就入栈
                stack.push(c);
            }

        }
        return stack.isEmpty();
    }
    //测试函数
    public static void  main(String[] args){

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


            boolean ret = new Solution().isValid(line);

            String out = booleanToString(ret);

            System.out.print(out);
    }
}

おすすめ

転載: blog.csdn.net/qq_40981804/article/details/91360281