Niukeネットブラッシングの質問-ブラケットシーケンス

問題の説明

文字 '('、 ')'、 '{'、 ')'、 '['、および ']'のみを含む文字列を指定して、指定された文字列が有効な
角かっこシーケンスであるかどうかを判別します。角かっこは正しい必要があります。順序は次とおりです。閉じている場合、「()」と「()[] {}」はどちらも有効な角かっこシーケンスですが、「(]」と「([)]」は無効です。

入力の説明:
括弧内に文字列を入力します

出力の説明:
このブラケットが有効かどうかを出力します

例1


「[]」を入力してください


trueを出力

ソリューション

分析

  1. スタックデータ構造の助けを借りて、スタックなどの左括弧に遭遇することができ、右括弧がスタックから飛び出します

方法

  1. スタックデータ構造の助けを借りて、スタックなどの左括弧に遭遇する可能性があり、右括弧がスタックから飛び出します。
    (PSのヒント:スタック内の左括弧と右括弧に遭遇する可能性があり、スペースを節約できます)

コード

// 思路1
public class Solution {
    
      
    public boolean isValid (String s) {
    
    
        if (s == null || s.length() == 0 || "".equals(s)) {
    
    
            return true;
        }
        // write code here

        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
    
    
            if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
    
    
                stack.add(s.charAt(i));
                continue;
            }

            if (stack.isEmpty()) return false;

            if (s.charAt(i) == ')' && stack.pop() == '(') {
    
    
                continue;
            } else if (s.charAt(i) == ']' && stack.pop() == '[') {
    
    
                continue;
            } else if (s.charAt(i) == '}' && stack.pop() == '{') {
    
    
                continue;
            } else {
    
    
                return false;
            }
        }

        return stack.isEmpty();
    }

	// 小技巧
    public boolean isValid2(String s) {
    
    
        Stack<Character> stack = new Stack<Character>();
        for (char c : s.toCharArray()) {
    
    
            if (c == '(')
                stack.push(')');
            else if (c == '[')
                stack.push(']');
            else if (c == '{')
                stack.push('}');
            else if (stack.empty() || stack.pop() != c)
                return false;
        }
        return stack.empty();
    }
}

時間計算量分析:
O(N):文字列をトラバースする回数はNであるため、時間計算量はO(N)です。

スペースの複雑さの分析:
O(N):すべての文字列が左括弧であると仮定すると、すべての文字列をスタックにプッシュする必要があるため、スペースの複雑さはO(N)です。

テストしたい場合は、Niuke.comのリンクに直接アクセスしてテストを行うことができます

ブラケットシーケンス-niuke.com

おすすめ

転載: blog.csdn.net/qq_35398517/article/details/113683730