对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。

给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。

测试样例:

“(()())”,6

返回:true

测试样例:

“()a()()”,7

返回:false

测试样例:

“()(()()”,7

返回:false

代码实现:

循环计数实现

class Parenthesis {
public:
    bool chkParenthesis(string A, int n) {
        // write code here
        	int num = 0;
	for (int i = 0; i < n; i++)
	{
		if (A[i] == '(')
			num++;
		else if (A[i] == ')')
			num--;
		else
			return false;
		if (num < 0)
			return false;
	}
	if (num == 0)
		return true;
	else
		return false;
    }
};

栈实现:

class Parenthesis {
public:
    bool chkParenthesis(string s, int n) {
        // write code here
	stack<char> sc;
	for (auto e : s)
	{
		switch (e)
		{
		case '(':
			sc.push(e);
			break;
		case ')':
		{
					if (sc.empty() || sc.top() != '(')
						return false;
					else
						sc.top();
		}
			break;

		default:
			return false;
	}
    }
		return true;
    }
};