【算法】括号匹配——2017华为招聘机试题

给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现,且嵌套关系正确。输出:true:代表括号成对出现并且嵌套正确,或字符串无括号字符,false:未正确使用括号字符。

分析:这个题目,如果有做过较多笔试题目的应该知道,简单的采用一个栈的特性,就能解决,左括号栈顶字符必须和第一个入栈的右括号字符匹配;

#include "stdafx.h"
#include 

//直接用栈的特性来解答
bool CheckCorrect(const char* v_sz)
{
	std::stack st;
	int iLen = strlen(v_sz);
	for(int i = 0; i < iLen; ++i)
	{
		if(v_sz[i] == '(' || v_sz[i] == '[' || v_sz[i] == '{')
		{
			st.push(v_sz[i]);
		}
		if(v_sz[i] == ')') //出现左括号,则此时栈顶为右括号则匹配
		{
			if(!st.empty() && st.top() == '(')
			{
				st.pop();
			}
			else
			{
				return false;
			}
		}
		if(v_sz[i] == ']')
		{
			if(!st.empty() && st.top() == '[')
			{
				st.pop();
			}
			else
			{
				return false;
			}
		}
		if(v_sz[i] == '}')
		{
			if(!st.empty() && st.top() == '{')
			{
				st.pop();
			}
			else
			{
				return false;
			}
		}
	}

	//栈空证明全部匹配完成,或未存在括号字符
	if(st.empty())
	{
		return true;
	}

	return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
	bool bRet = CheckCorrect("(1+1)/2");
	printf("CheckCorrect:%d\n", bRet == true ? 1 : 0);
	system("pause");
	return 0;
}

 

你可能感兴趣的:(算法思维训练)