华为笔试——C++括号匹配
题目:括号匹配
题目来源:https://blog.csdn.net/lizi_stdio/article/details/76618908
题目介绍:输入一个字符串,里面可能包含“()”、“ [ ] ”、" { } "三种括号,要求程序判断这个字符串里的括号是否成对出现且嵌套关系正确,若成对出现且嵌套关系正确,或字符串中无括号出现时,输出True;否则输出False。无需考虑非法输入。
例:
输入:
(1+4)/[(2+3)*4]
输出:
True
分析:这个问题考察的其实是栈的问题。因为若要成对出现且嵌套关系正确,就必须满足最后的“(”后的下一个括号必须是“)”,否则就不正确,其他两种括号同理。在前面出现的“ [ ”后出现的可能是“(”或者是“ ] ”,因此需要用到栈来解决。若出现左括号则进栈,遇到下一个右括号则与栈中比较,若匹配则出栈进行下一个比对。这样直到末尾,若栈空则输出True,否则输出False即可。
代码:(转载,链接放在文章开头,写的真的很好)
#include <iostream>
#include <cstring>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std; bool isLeft(char a)
{
return (a == '(') || (a == '[') || (a == '{');
} bool isRight(char a)
{
return (a == ')') || (a == ']') || (a == '}');
} bool isMatch(char a, char b)
{
if (a == '('&&b == ')')
{
return true;
}
else if (a == '['&&b == ']')
{
return true;
}
else if (a == '{'&&b == '}')
{
return true;
}
return false;
} int main()
{
#if 0
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
string str;
vector<char> cvec;
cvec.reserve();
while (cin >> str)
{
auto iter = str.begin();
for (; iter != str.end(); ++iter)
{
//左括号直接进栈
if (isLeft(*iter))
{
cvec.push_back(*iter);
}
//如果出现右括号
else if (isRight(*iter))
{
//不合理情况1: 栈空的话,直接退出 这里情况一开始忘记考虑,但是华为机试仍然100%通过
if (cvec.empty())
{
break;
}
char c = cvec.back();
cvec.pop_back();
//不合理情况2:判断栈中左括号与现在的右括号是否匹配
if (!isMatch(c, *iter))
{
break;
}
}
}
//处理不合理情况1,2 以及不合理情况3:字符已经遍历结束,但是栈仍然非空
if (iter != str.end() || !cvec.empty())
{
cout << "false" << endl;
}
else
{
cout << "true" << endl;
}
}
return ;
}
结果:
华为笔试——C++括号匹配的更多相关文章
- 华为笔试题--LISP括号匹配 解析及源码实现
在17年校招中3道题目AC却无缘华为面试,大概是华为和东华互不待见吧!分享一道华为笔试原题,共同进步! ************************************************ ...
- 括号匹配 区间DP (经典)
描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- [原]NYOJ 括号匹配系列2,5
本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
- 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))
描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起 ...
- 【栈思想、DP】NYOJ-15 括号匹配(二)
括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...
- NYOJ 题目15 括号匹配(二)(区间DP)
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
- C语言数据结构之栈:括号匹配
括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...
随机推荐
- web前端开发插件(无需重复造轮子)
1.artdialog 对话框组件 简介:是一个基于JavaScript编写的对话框组件,他拥有精致的界面与友好的接口 文档链接:http://www.daimajiayuan.com/downloa ...
- luogu11月月赛T3咕咕咕(组合数学)
题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...
- python写员工信息表作业笔记
需求 流程图
- jQuery 实现下载进度条
//ajax异步上传 $.ajax({ url: "${pageContext.request.contextPath }/upload", type: "POST&qu ...
- Home Assistant系列--之树莓派安装Samba 和 Jupyter Notebook
1.什么是Samba? Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上 ...
- BurpSuite—-Repeater模块(中继器)
一.简介 Burp Repeater 是一个手动修改并补发个别 HTTP 请求,并分析他们的响应的工具.它最大的用途就是和其他 Burp Suite 工具结合起来.你可以从目标站点地图,从 Burp ...
- linux中配置JDK环境变量
使用的centos版本为 7.5 首先我们要把jdk拷到linux中,这里我们借助XShell工具,我们先来看看Xshell的用法 打开Xshell 后点击文件,“新建“,如下图: 起一个名称,主机填 ...
- Docker搭建NSQ实时分布式消息集群
NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行 ...
- python -keras
Numpy 1. np. shape np.reshape np.prod() astype() dtype() From keras.layers import Input Input():用来实例 ...
- 自己第一次使用ANTLR遇到的问题
觉得既然是第一次尝试ANTLR嘛,那就来个简单点的,parse Windows 的 hosts 文件吧,结果...... 先上一段 grammar: grammar hosts; hostfile: ...