题目:有效的括号

使用到的知识点是栈

利用栈的FILO的特性,可以很好的对相应的括号进行匹配

比如"{ [ ( ) ] } "

第一次先压入{,接着判断下一个括号的类型,如果为左括号,则继续压入;如果为相匹配的右括号,则弹出;如果为不匹配的右括号,则直接返回false

最后如果整个栈都为空,就意味着所有的括号都得到了匹配,那么就返回true

注意:在一开始的时候,要判断一下特殊情况——

元素个数为奇数,就意味着总会有一个括号无法被匹配,直接返回false

 1bool isValid(string s)
 2    {
 3        std::vector<char> stack;
 4        if(s.size() % 2 == 1) return false;
 5        for(int n = 0; n < s.size(); n++)
 6        {
 7            if(s[n] == '(' || s[n] == '[' || s[n] == '{') stack.push_back(s[n]);
 8            else
 9            {
10                if (stack.empty()) return false;
11                if(s[n] == ')' && stack.back() == '(') stack.pop_back();
12                else if(s[n] == ']' && stack.back() == '[') stack.pop_back();
13                else if(s[n] == '}' && stack.back() == '{') stack.pop_back();
14                else return false;
15            }
16        }
17        if(stack.empty()) return true;
18        return false;
19    }