使括号有效的最少添加
不用栈,很简单的代码
题目描述
思想
其实就是遇到左括号++,右括号–,但是和单纯的左右括号加减不太一样,可以通过代码详细感受一下,运用cnt来记录,左括号++,右括号–,如果<0,则代表右括号比左括号,就需要sum++来平衡右括号
代码
int minAddToMakeValid(char * s)
{
int sum = 0,cnt = 0;
int len = strlen(s);
int i;
for(i = 0; i < len; i++)
{
cnt += s[i] == '('?1:-1;
if(cnt < 0)
{
sum -= cnt;
cnt = 0;
}
}
if(cnt)
sum += abs(cnt);
return sum;
}
错误代码
int minAddToMakeValid(char *s)
{
int sum = 0;
int i;
int len = strlen(s);
for(i = 0; i< len; i++)
{
if(s[i] == '(')
{
sum++;
}
else sum--;
}
return abs(sum);
}
太片面了,遇左括号就++,右括号就–。许多样例就通过不了。
总结
左括号需要右括号匹配,所以右括号一旦比左括号多就得–,但是左括号如果有右括号匹配就可以消去。