给出我的华为的一道面试题算法

原题目

括号匹配判断

问题描述:
检查字符串表达式中的括号是否匹配;
左括号数目同有括号数目不相等即为不匹配;
去除多余的左括号或者右括号,优先保留先出现的括号;
匹配后去除无效的括号:如:((表达式)) 应为(表达式);
只考虑小括号,不考虑先出现右括号的情况;
要求实现函数: (字符串最长长度为60;表达式正确性不需要考虑)
void Bracket(char* src, char* dst);

如果匹配则通过dst输出原串;

如果不匹配则根据要求去处多于括号后通过dst输出匹配后的串;

示例
输入:12+(345*25-34)  输出:12+(345*25-34)

输入:12+(345*(25-34)  输出: 12+(345*25-34)

输入:(12+345)*25)-34  输出: (12+345)*25-34

输入:(543+(256-43)*203))+24

                        输出:(543+(256-43)*203)+24

输入:((1+2)*((34-2))+((2*8-1)

                        输出:((1+2)*(34-2)+2*8-1)


void Bracket(char* src, char* dst);只能在这个函数中实现,不允许用栈。不允许另写函数并加以调用。src是输入的字符串,dst是输出的字符串!

 

 

 

 

 

算法描述:

第一步:

扫描字符串中出现(,)的位置记录到array数组

第二步:

array数组分成两组,A组是(出现的位置, B组是)出现的位置

第三步:

遍历B组中的元素,每次遍历将B[n]在A组中比较,若B[n]>A[K] && B[n]<A[K+1],则将B[n]和A[K]从B组和A组中清除

第四步:

此时A组和B组中是多余的(和)位置,拼接数组

你可能感兴趣的:(算法,面试,华为,DST)