面试题整理12 求字符串括号最大深度子串
来源:互联网 发布:淘宝打折软件叫什么 编辑:程序博客网 时间:2024/05/01 23:22
题目:求一个表达式字符串中括号层次最深的第一个表达式,如表达式
"a+b+((c+d)+(e+f))",则结果为”c+d"。
分析: 一般算式会让人想起用栈分别存储操作数和符号值,但是本题目不适用,我写的代码中采用了类似于求最大连续子数组的解法,设置变量一个记录当前的括号深度,一个记录最大的括号深度,从字符串头开始遍历,当遍历到字符‘('时,当前括号深度加1,当遍历到字符‘)'时,当前括号深度减1,;当当前括号深度大于最大括号深度时,将当前括号深度赋值给最大括号深度;当当前括号深度小于0时,将当前括号深度置0。算法复杂度O(n)。
代码如下:如有错误,请大家指正。
char* FindMostDeepExpression(const char* str){if(str == NULL)return NULL;int nLength = strlen(str);if(nLength < 2)return (char*)str;int maxDeepNum = 0;int tempDeepNum = 0;int startIndex = 0;int endIndex = nLength-1;bool isEnd = false; //标志是结束for(int i=0; i<nLength; ++i){if(str[i] == '('){++tempDeepNum;if(tempDeepNum > maxDeepNum ){maxDeepNum = tempDeepNum;isEnd = false;startIndex = i+1;}}else if( str[i] == ')'){if( tempDeepNum == maxDeepNum && !isEnd){endIndex = i-1;isEnd = true;}-- tempDeepNum;if(tempDeepNum < 0){tempDeepNum = 0;}}}char *result = new char[endIndex-startIndex+2];strncpy(result,str+startIndex,endIndex-startIndex+1);result[endIndex-startIndex+1] = '\0';return result;}void Test(char *testName, char* str,char* expectResult){if( testName!= NULL)printf("%s begins:\n",testName);if(expectResult != NULL)printf("expected result is %s \n",expectResult);char* result = FindMostDeepExpression(str);printf("the actual result is : %s \n",result);}void Test1(){char* str = NULL;Test("Test1",str,NULL);}void Test2(){char* str = "a+b";Test("Test2",str,"a+b");}void Test3(){char* str = "a+b+((c+d)+(e+f))";Test("Test3",str,"c+d");}void Test4(){char* str = "a+b+((c+d)+(e+f))";Test("Test3",str,"c+d");}void Test5(){char* str = "a+(b+c)";Test("Test5",str,"b+c");}int main(){Test1();Test2();Test3();Test4();system("pause");}
0 0
- 面试题整理12 求字符串括号最大深度子串
- 面试题5:求字符串中回文子串的最大长度
- 面试题之求两个字符串的最大公共子串
- 面试题整理-线性时间求最长回文子串
- 微软面试题---求子数组最大乘积问题
- 面试题2:求子数组的最大和
- 微软面试题系列:求子数组最大和
- 面试题 31: 求子数组的最大和
- 面试题10-- 求子数组的最大和
- 面试题五:求子数组的最大和
- 面试题05:求子数组的最大和
- 经典面试题之求连续子数组最大和
- 面试题整理9 连续子数组的最大和
- 面试题-求一个串包含另一个串的最大子串长度的解法
- 一道C语言面试题——求最大连续数字子串
- 求两个字符串的最大子串
- 求字符串的所有最大子串
- 求两字符串最大公共子串
- 【静静的花开】有感:杂谈春天来
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file
- webbrowser获取动态网页元素
- 路由器DHCP的配置详细方法
- cordova介绍
- 面试题整理12 求字符串括号最大深度子串
- 如何在《微软技术社---新闻组,论坛,BBS》上访问自己参与过的话题?
- linux从开机加电到执行main函数之前
- OSGi,Java模块化框架的另类进化
- 验证码客户端验证
- poj 3126
- Confluence 用户属性(User Profile)宏
- Why does a virtual function get hidden?
- unix高级环境编程 例子 代码实现练习 第四章:文件和目录