码迷,mamicode.com
首页 > 其他好文 > 详细

经典——Valid Parentheses

时间:2015-09-15 18:15:32      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

class Solution {
public:
    bool isValid(string s) {
        if(s.size()%2!=0)
            return false;
        stack<int> stk;
        int len=s.size(),i;
        for(i=0;i<len;i++)
        {
            if(s[i]==‘)‘||s[i]==‘]‘||s[i]==‘}‘)
            {
                if(!stk.empty())
                {
                   char c = stk.top();
                   if ((c == ‘(‘ && s[i] != ‘)‘) || (c == ‘[‘ && s[i] != ‘]‘) || (c == ‘{‘ && s[i] != ‘}‘))
                        return false;
                    else
                        stk.pop();
                }
                else
                    return false;
            }
            else
                stk.push(s[i]);
            
        }
        return stk.empty();
   
        
    }
};

  

这一题是典型的使用压栈的方式解决的问题,题目中还有一种valid情况没有说明,需要我们自己考虑的,就是"({[]})"这种层层嵌套但

可以完全匹配的,也是valid的一种。解题思路是这样的:我们对字符串S中的每一个字符C,如果C不是右括号,就压入栈stack中。

如果C是右括号,判断stack是不是空的,空则说明没有左括号,直接返回not valid,非空就取出栈顶的字符pre来对比,如果是匹配

的,就弹出栈顶的字符,继续取S中的下一个字符;如果不匹配,说明不是valid的,直接返回。当我们遍历了一次字符串S后,注意

这里还有一种情况,就是stack中还有残留的字符没有得到匹配,即此时stack不是空的,这时说明S不是valid的,因为只要valid,一

定全都可以得到匹配使左括号弹出。

 

经典——Valid Parentheses

标签:

原文地址:http://www.cnblogs.com/qiaozhoulin/p/4810857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!