20. 有效的括号

题目描述

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

思路

解决方案思路:栈的抵消的思想,没用的抵消掉,去除,

代码实现

class Solution {
public:
    bool isValid(string s) {

    	stack<char> stk;
        //从左到右将字符串装入栈中,栈中元素能抵消时抵消,不能放入,矛盾时直接返回结果
    	for(int i = 0;i < s.length();i++)
    	{
    		char elem = s[i];//当前字符串元素
    		//如果当前字符不是括号
    		if(elem!='(' && elem!=')' && elem!='[' && elem!=']' && elem!='{' && elem!='}')
    			return false;
    		else
    		{   

    			if(stk.empty())
    				stk.push(elem);
    			else
    				{
    					char temp = stk.top();
    			        if((temp=='(' && elem==')') || (temp=='[' && elem==']') || (temp=='{' && elem=='}'))
    			        	stk.pop();
    			        else
    			        	stk.push(elem);
    			    }
    		}

    	}
    
    if(stk.empty())
    	return true;
    else
    	return false;  
    }
};

posted on 2021-07-20 23:35  朴素贝叶斯  阅读(36)  评论(0编辑  收藏  举报

导航