あなたは「(」、「)」作られた、と小文字文字列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
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。