1021-最も外側の括弧を削除する

1.タイトルの説明

有効な角かっこ文字列は空( "")、 "(" + A + ")"、またはA + Bです。ここで、AとBは有効な角かっこ文字列であり、+は文字列の連結を表します。たとえば、「」、「()」、「(())()」、「(()(()))」はすべて有効な角かっこ文字列です。

有効な文字列Sが空でなく、S = A + Bに分割する方法がない場合、それをプリミティブと呼びます。ここで、AとBは両方とも空でない有効な括弧で囲まれた文字列です。

空でない有効な文字列Sが与えられた場合、次のようにプリミティブに分解することを検討してください。S= P_1 + P_2 +…+ P_k、ここでP_iは有効な括弧で囲まれた文字列プリミティブです。

Sでプリミティブ分解を実行し、分解内の各プリミティブ文字列の最も外側の角かっこを削除して、Sを返します。

例1:

入力: "(()())(())"
出力: "()()()"
説明:
入力文字列は "(()())(())"であり、プリミティブ分解は "( ()()) "+"(()) "、各部分の最も外側の角かっこを削除して、"()() "+"() "="()()() "を取得します。

例2:

入力: "(()())(())(()(()))"
出力: "()()()()(())"
説明:
入力文字列は "(()() )(())(()(())) "、プリミティブ分解は"(()()) "+"(()) "+"(()(())) "であり
、セクションの最も外側の括弧は、 "()()" + "()" + "()(())" = "()()()()(())"になります。

例3:

入力: "()()"
出力: ""
説明:
入力文字列は "()()"であり、プリミティブ分解は "()" + "()"です。 "を
取得したら、各部分の最も外側の角かっこを削除してください。 "+" "=" "。

出典:LeetCode(LeetCode)
リンク:https://leetcode-cn.com/problems/remove-outermost-parentheses
著作権はLeetCodeが所有しています商用転載の場合は、公認機関にご連絡ください。非商用転載の場合は、出典を明記してください。

2.解決策の
アイデア:カウントして外側の括弧を削除します。「(」、次にj ++、「)」、次にj–、j = 0、次に最も外側の「)」に遭遇した場合。
複雑さ:時間の複雑さはO(n)であり、空間の複雑さはO(1)です。

char * removeOuterParentheses(char * S){
    
    
    
    int n=0;
    for(int i=0,j=0;S[i]!='\0';i++)
    {
    
    
        if(S[i]=='(')
        {
    
    
            j++;
            if(j!=1)
            {
    
    
                S[n++]=S[i];
            }
        }
        else
        {
    
    
            j--;
            if(j!=0)
            {
    
    
                S[n++]=S[i];
            }
        }
    }
    S[n]='\0';//结尾
    return S;
}

おすすめ

転載: blog.csdn.net/qq_36439722/article/details/112060462