题目描述:
给定一个由 '(' 和 ')' 括号组成的字符串 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 }