題目描述:
給定一個由 '(' 和 ')' 括號組成的字符串 S,我們需要添加最少的括號( '(' 或是 ')',可以在任何位置),以使得到的括號字符串有效。從形式上講,只有滿足下面幾點之一,括號字符串才是有效的:它是一個空字符串,或者 它可以被寫成 AB (A 與 B 連接), 其中 A 和 B 都是有效字符串,或者 它可以被寫作 (A),其中 A 是有效字符串。 給定一個括號字符串,返回為使結果字符串有效而必須添加的最少括號數。示例 1:輸入:"())" 輸出:1 示例 2:輸入:"(((" 輸出:3 示例 3:輸入:"()" 輸出:0 示例 4:輸入:"()))((" 輸出:4
?
解法:
1 int minAddToMakeValid(char* S) { 2 int i,l = 0,res = 0,len=strlen(S); 3 for (i = 0 ; i < len ; i ++) 4 { 5 if (S[i]=='(') //入棧 6 { 7 l ++; 8 } 9 else //出棧 10 { 11 if (l == 0) 12 { 13 res ++; //棧為空,丟棄數+1 14 } 15 else 16 l --; //棧不為空,出棧 17 } 18 } 19 return res+l; //棧中數量+丟棄棧 20 }
?