题目:求一个表达式字符串中括号层次最深的第一个表达式,如表达式



"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");
}

面试题整理12 求字符串括号最大深度子串相关推荐

  1. Golang 实现 【求字符串括号合法性 判断】

    题目 输入一个字符串,其中包含 [](){} 六种括号,请你判断这个字符串组成的括号是否合法. 题目示例 Input: "()[]{}" Output: trueInput: &q ...

  2. 【IT笔试面试题整理】字符串的排列

    [试题描述]输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 分析:这是一道很好的考查对 ...

  3. aspx 判断字符串是否为decimal_python 经典面试题:判断字符串括号是否闭合{}[]()...

    前言 经典面试题:判断一个字符串里面的括号是否闭合,如:{[{()}]()} 就是一个闭合的字符串. {{()}]} 这个里面 ([)] 括号不对称,这种就是不闭合. python判断闭合 解决基本思 ...

  4. C语言试题三十三之比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

    1. 题目 请编写函数function,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符串长度相同,则返回第一个字符串. 2 .温馨提示 ...

  5. [2013百度软件研发笔试题] 求字符串中连续出现同样字符的最大值

    题目完整描写叙述为:用递归的方式实现一个求字符串中连续出现同样字符的最大值.如aaabbcc,连续出现a的最大值为3,abbc,连续出现字符最大的值为2. 下面是我想出来的方法: #include & ...

  6. 面试题整理 8 字符串排序扩展题

    <剑指offer>扩展题, (1)求字符串所有字符的组合 分析:同样采取分治的思想,如果输入n个字符,则可以构成长度为1.2...n的组合.在n个字符求长度为m的组合时,可以分解为第一个字 ...

  7. c语言求最后一个单词的长度,试题2:计算字符串最后一个单词的长度

    试题描述:计算字符串最后一个单词的长度,单词之间以空格隔开 涉及的知识点: 1.scanf读取: 1.1.以%d读取时,只识别"十进制整数".对 %d 而言,空格.回车. Tab ...

  8. LeetCode常用算法模式大厂面试题整理

    转载自  LeetCode常用算法模式&大厂面试题整理 文章目录 1.滑动窗口 2.双指针 3.快慢指针 4.合并区间 5.循环排序 6.就地反转链表 7.堆-优先队列问题 8.Top K 9 ...

  9. [转载] Spring面试题整理

    参考链接: Java中的动态方法Dispatch和运行时多态 Spring面试题整理 2018年03月07日 21:11:46 hrbeuwhw 阅读数:49116 Spring 概述 1. 什么是s ...

最新文章

  1. SQL语句统计错误率
  2. 图像的评价指标之SSMI——结构相似性
  3. 3模型大小_Github推荐一个国内牛人开发的超轻量级通用人脸检测模型
  4. vue设置标签自定义属性_Vue组件化开发之插槽
  5. mysql自带订阅功能_为博客提供订阅功能
  6. linux内核数据结构实现--链表、队列和哈希
  7. 如何将文件从iPhone或iPad空投到Mac计算机?
  8. Go基础-核心特性和前景
  9. 2020年鼠年春节贺词祝福大全
  10. 常见系统故障修复(一)——修复MBR扇区故障
  11. Python可视化-WordCloud生成云词图片
  12. 集合长度可变的实现原理(解析为什么集合长度可变)
  13. 互联网电影上线,手机电影院移动端就可以看电影
  14. Metasploit入侵win7系统
  15. 网易2018校园招聘题目
  16. 浅析支付宝钱包支付流程
  17. smb连接错误“请检查服务器名称或IP地址,然后再试一次,如果问题持续发生,请联系系统管理员“
  18. 学习笔记(01):【孙伟老师UID课堂】设计师也能会的-WEB前端入门基础HTML+CSS视频教程-09综合表单标签讲解-1...
  19. 代理模式(Proxy Design Pattern)及代码实现
  20. (三)MkDocs学习——配置主题

热门文章

  1. nginx学习笔记(7)Nginx如何处理一个请求---转载
  2. 下载安装tomcat6.0
  3. 迪拜与IBM合作推出基于区块链的商业注册系统
  4. 如何通过牛顿方法解决Logistic回归问题 By 机器之心2017年8月09日 16:30 本文介绍了牛顿方法(Newton's Method),以及如何用它来解决 logistic 回归。log
  5. 深度学习元老Yann Lecun详解卷积神经网络
  6. C语言有三个电阻r1r2r3,[VR虚拟现实]ARM硬件试题库及答案(37页)-原创力文档
  7. Modular Arithmetic 模算术
  8. Java 8 - Stream流骚操作解读2_归约操作
  9. JavaScript-JavaScript概述及简单使用
  10. x3650m5不自动进系统_17日起,泉州这个地方自动抓拍系统启用!这些车闯红灯、严重超载、不按道行驶被查处曝光!【交通大整治】...