百度2014校园招聘消除嵌套的括号
给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。
时间复杂度0(n),空间复杂度为O(1)
1 #include <stdio.h> 2 int is_rights(char ch)//判断右括号 3 { 4 if( ch == ')' ) 5 return 1; 6 else 7 return 0; 8 } 9 int is_left(char ch)//判断左括号 10 { 11 if(ch == '(') 12 return 1; 13 else 14 return 0; 15 } 16 int del_nest_bracket(char str[]) 17 { 18 int i, flag = 0, k = 0; 19 for(i = 0; str[i] != '\0'; i++) 20 { 21 if((is_left(str[i])==0) && 22 (0==is_rights(str[i]))){//不是括号 23 str[k++] = str[i]; 24 } 25 else if(is_left(str[i])){ //左括号 26 if(flag == 0) 27 str[k++] = str[i]; 28 flag++; 29 } 30 else{ 31 if(flag == 1) //右括号 32 str[k++] = str[i]; 33 flag--; 34 } 35 } 36 str[k] = '\0'; 37 if(flag == 0) 38 return 0; 39 else//当括号不匹配的时候flag肯定不为0 40 return -1; 41 } 42 int main() 43 { 44 char str[] = "1,(2,2,4),(5,6)),(7,0)"; 45 int ret = del_nest_bracket(str); 46 if(ret == 0) 47 printf("str = %s\n", str); 48 49 return 0; 50 }