华为2018届校园招聘笔试题目以及相应代码分享 软件开发岗位

华为2018届校园招聘笔试

时间20170712


笔试题目

01 括号匹配

//01 括号匹配
#define _CRT_SECURE_NO_WARNINGS
/*
括号匹配

给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。
输出:true:若括号成对出现且嵌套关系正确,或该字符串中无括号字符;
false:若未正确使用括号字符。
实现时,无需考虑非法输入。

输入描述:
输入为:
字符串

例子:(1+2)/(0.5+1)

输出描述:
输出为:
字符串

例子:true
*/

//这是josan的AC代码,仅供参考。
//程序有什么bug,有什么可以改进的地方,欢迎私信交流或者留言回复。
//共同学习,共同进步。

#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(200);
	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;
				}
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值