百度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 }

 

posted @ 2013-12-20 16:16  夕相待  阅读(268)  评论(0编辑  收藏  举报