1249無効なブラケットを取り外し

あなたは「(」、「)」作られた、と小文字文字列s。

あなたはとても「括弧文字列」の残りの部分は有効にその文字列「(」または「)」(カッコ内の任意の位置を削除することができます)、から最小数を削除する必要があります。

正当なA文字列を返却してください。

効果的な「カッコ内の文字列は、」次の要件のいずれかに適合しなければなりません:

空の文字列または文字列は、小文字が含まれている
「括弧文字列の」AとBが有効である文字列AB(接続B)のように書くことができ
、Aは(A)文字列、のように書くことができます。効果的な「カッコ文字列」
 

例1:

入力:S = "リー(T( C)O)デ)"
出力: "リー(T(C) O)デ"
説明: "リー(T(CO)デ)"、「イ・(T(C)ODE )「も実行可能な答えです。
例2:

入力:S = ")B( C)D"
出力: "AB(C)D"
実施例3:

入力:S = "))(( "
出力: ""
説明:空の文字列も有効である
(実施例4)

入力:S = "((B (C)D)"
出力: "(B(C) D)"
 

ヒント:

1 <= s.length <= 10 ^ 5
S [I] '(' '')であってもよいし、小文字

class Solution {
    public String minRemoveToMakeValid(String s) {
        if(s == null || s.length() == 0){
            return "";
        }
        List<Integer> removeIndexList = new ArrayList<>();
        Stack<Integer> stack = new Stack();
        for(int i=0;i<s.length();++i){
            if('(' == s.charAt(i)){
                stack.push(i);
            } else if(')' == s.charAt(i)){
                if(stack.isEmpty()){
                    removeIndexList.add(i);
                }else{
                    stack.pop();
                }
            }
        }
        StringBuilder result = new StringBuilder();
        for(int i=0;i<s.length();++i){
            if(removeIndexList.contains(i) || stack.contains(i)){
                continue;
            }
            result.append(s.charAt(i));
        }
        return result.toString();
    }
}

 

charAt()メソッドは、基本的なタイプ==比較を使用することを基本的な型を返します

 

 

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。

公開された106元の記事 ウォン称賛16 ビュー40000 +

おすすめ

転載: blog.csdn.net/qq_35356190/article/details/104056737