当前位置 博文首页 > Scissors_初夏的博客:初夏小谈:[NK]:合法括号序列判断

    Scissors_初夏的博客:初夏小谈:[NK]:合法括号序列判断

    作者:[db:作者] 时间:2021-08-16 12:57

    题目描述

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

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

    测试样例:

    "(()())",6
    返回:true

    测试样例:

    "()a()()",7
    返回:false

    测试样例:

    "()(()()",7
    返回:false

    解题思路:


    在这个题中,就是匹配括号的问题。利用栈来进行括号匹配,当是左半括号时入栈,遇到右半括号时就将栈顶的左半括号出栈,这样到最后,栈中为空时就成功,否则失败。

    我在实现时,在本地VS2017运行正常,在做题界面却出现段错误。在匹配时必须考虑一个问题:

    注意:

    ? ? ? ? ? 当遇到右半括号时去栈顶匹配时,为空的情况。

    代码:

    class Parenthesis {
    public:
    	bool chkParenthesis(string A, int n) {
    		// write code here
    		stack<char> sta;
    		if (A.size() % 2 != 0)
    		{
    			return false;
    		}
    		else
    		{
    			for (size_t i = 0; i < A.size(); i++)
    			{
    				if (A[i] != '(' && A[i] != ')')
    				{
    					return false;
    				}
    				if (A[i] == '(')
    				{
    					sta.push(A[i]);
    				}
    				else
    				{
    					if (sta.size() == 0)
    					{
    						return false;
    					}
    					if (sta.top() == '(')
    					{
    						sta.pop();
    					}
    					else
    					{
    						return false;
    					}
    				}
    			}
    			return true;
    		}
    	}
    };

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 珍&源码

    cs