<LeetCode OJ> 20. Valid Parentheses
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
<LeetCode OJ> 20. Valid Parentheses的更多相关文章
- LeetCode解题笔记 - 20. Valid Parentheses
这星期听别人说在做LeetCode,让他分享一题来看看.试了感觉挺有意思,可以培养自己的思路,还能方便的查看优秀的解决方案.准备自己也开始. 解决方案通常有多种多样,我觉得把自己的解决思路记录下来,阶 ...
- leetCode练题——20. Valid Parentheses
1.题目 20. Valid Parentheses——Easy Given a string containing just the characters '(', ')', '{', '}', ...
- LeetCode记录之20——Valid Parentheses
09.18更新算法采用栈的思想解决,方法①所示. 本题主要是找是否有匹配的字符串,因为还没有复习到栈之类的知识点,只能还是采用暴力方法了,后期会补上更加优化的算法.我的思路就是先遍历一遍找是否有匹配的 ...
- 【leetcode❤python】 20. Valid Parentheses
#-*- coding: UTF-8 -*-#利用栈的思想#如果输入的左测扩则入栈,如果输入为右侧扩,判断其是否与当前栈顶配对,如果匹配则删除这一对,否则return False#'(', ')', ...
- leetcode个人题解——#20 Valid Parentheses
class Solution { public: bool isValid(string s) { stack<char> brackts; ; i < s.size(); i++) ...
- [Leetcode][Python]20: Valid Parentheses
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 20: Valid Parentheseshttps://oj.leetcod ...
- 20. Valid Parentheses【leetcode】
20. Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
- leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、
20. Valid Parentheses 错误解法: "[])"就会报错,没考虑到出现')'.']'.'}'时,stack为空的情况,这种情况也无法匹配 class Soluti ...
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
随机推荐
- NGUI研究之开发项目的一些使用心得比較细节
不知不觉使用NGI插件已经有一段时间了.感觉NGUI真的是眼下Unity3D中最好用的UI插件. 可是它也有一些不是BUG的BUG,这些问题可能会让新人摸不着头脑,那么这篇文章将总结一下这段时间 ...
- 85.Mongoose指南 - Schema
转自:https://www.bbsmax.com/A/pRdBnKpPdn/ 定义schema 用mongoose的第一件事情就应该是定义schema. schema是什么呢? 它类似于关系数据库的 ...
- json数据字典,以及数据在下拉框中显示
建立person_vocation.json数据字典文件,内容: [ {"id":1,"disabled":false,"selected" ...
- 线程1—Runnable
随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...
- 滑动切换Activity代码
最近需要对练习项目中的代码进行优化,发现很多代码写起来远比想象的困难很多.刚接触Android时间不长,很多东西都不能融会贯通,所以才会有这样的问题存在,当然学习中遇到的问题很有必要做个总结.想想这个 ...
- caffe(10) 命令行解析
caffe的运行提供三种接口:c++接口(命令行).python接口和matlab接口.本文先对命令行进行解析,后续会依次介绍其它两个接口. caffe的c++主程序(caffe.cpp)放在根目录下 ...
- js实现观察者模式风格替换
如下图,我们看到两种风格:在选择男士时,页面颜色为黑色:在选择女士时,页面颜色为粉红色. 主要可以分为两类: 下拉框 ---> 被观察者 div ---> 观察者 面向过程实现风格替换: ...
- nginx省去每次查看进程操作
在我们想要关闭.重启等操作时需要查看 nginx 的进程,那么有没有一种方法省去查看的步骤? kill -HUP `cat lo ...
- 洛谷3388 【模板】割点 tarjan算法
题目描述 给出一个n个点,m条边的无向图,求图的割点. 关于割点 在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点就叫做割点(cut vertex / articul ...
- 【问题:SSH】win10使用SSH链接服务器时,提示:Host key verification failed
异常原因:当前连接新建的验证信息与之前保存的验证信息不一致,将原来的验证信息删除就可以了. 1 使用以下命令,清空之前缓存的信息.或者直接打开C:\Users\Nolan\.ssh\known_hos ...