Given a string containing just the characters '('')''{''}''[' and ']',
determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are
all valid but "(]" and "([)]" are
not.

我的解法:时间复杂度O(N)

一旦出现左型括号,先存储起来就准备与右型括号配对,假设是右型括号,就运行配对(检查存储之中是否有左型括号)!

从标签来看,利用栈来完毕如此操作,左型括号先压栈等待匹配,

右型括号就查看栈顶是否是左型括号(假设不是已经不匹配了。"([)]" are not.)

最后通过栈是否是空的来推断是否是全然配对

class Solution {
public:
bool isValid(string str) {
stack<char> s;
if(str.size() <= 1)
return false;
for(int i=0;i<str.size();i++)
{
switch(str[i])
{
//左型括号直接压栈
case '(' :
s.push('(');
break;
case '{' :
s.push('{');
break;
case '[' :
s.push('[');
break; //右型括号运行匹配操作,能匹配则弹出栈顶,不能则返回false
case ')' :
if(s.empty())
{
return false;
}else{
char ch=s.top();
if(ch=='(')
{
s.pop();
continue;
}else{
return false;
break;
}
}
break; case '}' :
if(s.empty())
{
return false;
}else{
char ch=s.top();
if(ch=='{')
{
s.pop();
continue;
}else{
return false;
break;
}
}
break; case ']' :
if(s.empty())
{
return false;
}else{
char ch=s.top();
if(ch=='[')
{
s.pop();
continue;
}else{
return false;
break;
}
}
break;
}
}
//最后若是空则完毕匹配
if(s.empty())
return true;
else
return false;
}
};

学习别人的算法:

运用数据结构红黑树map来存储配对的括号,以便查找匹配情况(时间浮渣度N*lg(N))

一旦出现左型括号,就存储相应的右型括号,

假设是右型括号,就运行配对(检查存储之中是否有左型括号)!

假设匹配则删除vector的最后一个元素

最后通过vc是否是空的来推断是否是全然配对

class Solution {
public:
bool isValid(string s)
{
vector<char> vc;
map<char, char> mapping;
mapping['('] = ')';
mapping['{'] = '}';
mapping['['] = ']';
for (int i = 0; i < s.length(); ++i)
{
if (s[i] == '(' || s[i] == '{' || s[i] == '[') //假设是左型括号。就直接压入相应的右型括号到vector
vc.push_back(mapping[s[i]]);
else if (vc.empty() || vc.back() != s[i])//假设右型括号的不匹配情况
return false;
else //右型括号的匹配情况
vc.pop_back();//删除vector中的最后一个元素
}
return vc.empty() ? true : false;
}
};

注:本博文为EbowTang原创,兴许可能继续更新本文。假设转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/50380804

原作者博客:http://blog.csdn.net/ebowtang

&lt;LeetCode OJ&gt; 20. Valid Parentheses的更多相关文章

  1. LeetCode解题笔记 - 20. Valid Parentheses

    这星期听别人说在做LeetCode,让他分享一题来看看.试了感觉挺有意思,可以培养自己的思路,还能方便的查看优秀的解决方案.准备自己也开始. 解决方案通常有多种多样,我觉得把自己的解决思路记录下来,阶 ...

  2. leetCode练题——20. Valid Parentheses

    1.题目 20. Valid Parentheses——Easy  Given a string containing just the characters '(', ')', '{', '}',  ...

  3. LeetCode记录之20——Valid Parentheses

    09.18更新算法采用栈的思想解决,方法①所示. 本题主要是找是否有匹配的字符串,因为还没有复习到栈之类的知识点,只能还是采用暴力方法了,后期会补上更加优化的算法.我的思路就是先遍历一遍找是否有匹配的 ...

  4. 【leetcode❤python】 20. Valid Parentheses

    #-*- coding: UTF-8 -*-#利用栈的思想#如果输入的左测扩则入栈,如果输入为右侧扩,判断其是否与当前栈顶配对,如果匹配则删除这一对,否则return False#'(', ')', ...

  5. leetcode个人题解——#20 Valid Parentheses

    class Solution { public: bool isValid(string s) { stack<char> brackts; ; i < s.size(); i++) ...

  6. [Leetcode][Python]20: Valid Parentheses

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 20: Valid Parentheseshttps://oj.leetcod ...

  7. 20. Valid Parentheses【leetcode】

    20. Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  8. leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、

    20. Valid Parentheses 错误解法: "[])"就会报错,没考虑到出现')'.']'.'}'时,stack为空的情况,这种情况也无法匹配 class Soluti ...

  9. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

随机推荐

  1. 数位$dp$

    数位\(dp\)搞了一上午才搞懂.靠这种傻\(X\)的东西竟然花了我一上午的时间. 数位\(dp\) 概念 数位\(dp\)就是强制你分类一些数,例如给你一段区间,然后让你求出不包含\(2\)的数的个 ...

  2. Kali linux 2016.2(Rolling)中metasploit的主机探测

    不多说,直接上干货! 1.活跃主机扫描 root@kali:~# ping -c 202.193.58.13 PING () bytes of data. bytes ttl= time=25.4 m ...

  3. 使用与不适用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  4. PostgreSQL Replication之第九章 与pgpool一起工作(4)

    9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...

  5. 把asp:CheckBoxList 变成单选框

    单选框代码 <asp:CheckBoxList runat="server" RepeatDirection="Horizontal" ID=" ...

  6. [POI2011]MET-Meteors 整体二分_树状数组_卡常

    线段树肯定会 TLE 的,必须要用树状数组. Code: // luogu-judger-enable-o2 #include <cstdio> #include <algorith ...

  7. Bomb HDU - 3555 数位dp

    Code: #include<cstdio> #include<algorithm> #include<cstring> #include<string> ...

  8. mysql的关联查询简写

    平常的内连接查询: SELECT * from ab_style as a INNER JOIN ab_url as b on a.style_bold=b.url_id 可支持简写风格: selec ...

  9. [洛谷P2045]方格取数加强版

    题目大意:有一个n*n的矩阵,每个格子有一个非负整数,规定一个人从(1,1)开始,只能往右或下走,走到(n,n)为止,并把沿途的数取走,取走后数变为0.这个人共取n次,求取得的数的最大总和. 解题思路 ...

  10. 题解 P1531 【I Hate It】

    这道题明明是裸的线段树,蒟蒻却80分了五六次... ------------ 根据题意,显然是维护一棵单点修改区间查询的线段树,于是直接套区间修改的代码... 结构体,即为树上的节点. struct ...