LeetCode---(20)Valid Parentheses
2015-06-23 15:35
513 查看
Given a string containing just the characters
determine if the input string is valid.
The brackets must close in the correct order,
all valid but
not.
算法流程为:
1、从前向后扫描字符串;
2、遇到左括号x,就压栈x;
3、遇到右括号y:
如果发现栈顶元x和该括号y匹配,则栈顶元素出栈,继续判断下一个字符;
如果栈顶元素x和该括号y不匹配,字符串不匹配;
如果栈为空,字符串不匹配;
4、扫描完成后,如果栈恰好为空,则字符串匹配,否则,字符串不匹配。
解法1:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(c=='('||c=='{'||c=='[')
stk.push(c);
else{
if(stk.size()==0)
return false;
char pre=stk.top();
switch(c)
{
case ')':
if(pre=='(')
stk.pop();
else
return false;
break;
case ']':
if(pre=='[')
stk.pop();
else
return false;
break;
case '}':
if(pre=='{')
stk.pop();
else
return false;
break;
}
}
}
if(stk.empty())
return true;
else
return false;
}
};
解法2:
class Solution {
public:
bool isValid(string s) {
string left="([{";
string right=")]}";
stack<char> stk;
for(auto c:s)
{
if(left.find(c)!=string::npos)
stk.push(c);
else{
if(stk.empty()||stk.top()!=left[right.find(c)])
return false;
else
stk.pop();
}
}
if(stk.empty())
return true;
else
return false;
}
};
'(',
')',
'{',
'}',
'['and
']',
determine if the input string is valid.
The brackets must close in the correct order,
"()"and
"()[]{}"are
all valid but
"(]"and
"([)]"are
not.
算法流程为:
1、从前向后扫描字符串;
2、遇到左括号x,就压栈x;
3、遇到右括号y:
如果发现栈顶元x和该括号y匹配,则栈顶元素出栈,继续判断下一个字符;
如果栈顶元素x和该括号y不匹配,字符串不匹配;
如果栈为空,字符串不匹配;
4、扫描完成后,如果栈恰好为空,则字符串匹配,否则,字符串不匹配。
解法1:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(c=='('||c=='{'||c=='[')
stk.push(c);
else{
if(stk.size()==0)
return false;
char pre=stk.top();
switch(c)
{
case ')':
if(pre=='(')
stk.pop();
else
return false;
break;
case ']':
if(pre=='[')
stk.pop();
else
return false;
break;
case '}':
if(pre=='{')
stk.pop();
else
return false;
break;
}
}
}
if(stk.empty())
return true;
else
return false;
}
};
解法2:
class Solution {
public:
bool isValid(string s) {
string left="([{";
string right=")]}";
stack<char> stk;
for(auto c:s)
{
if(left.find(c)!=string::npos)
stk.push(c);
else{
if(stk.empty()||stk.top()!=left[right.find(c)])
return false;
else
stk.pop();
}
}
if(stk.empty())
return true;
else
return false;
}
};
相关文章推荐
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之一
- Behavioral模式之Chain of Responsibility模式
- 关于VS2010无法编译问题
- 解压 boot.img
- 袁腾飞语录
- LocalBroadcastManager使用简析
- DUMPBIN命令使用详解
- 21. 多人协作
- MySQL Innodb 插入调优
- cadence学习1 2015.6.23
- easyui 本地js数据的加载
- VS2012+OpenCV配置及第一个程序
- UML简单介绍(十九)——部署图的基本概念与实例介绍
- Android Tombstone/Crash的log分析和定位
- 分布式和集群区别
- [MATLBA]imresize函数的用法
- js 正则过滤 行内 style 样式
- 字符编码详解
- java 三次样条插值 画光滑曲线 例子
- Error "CLR20r3" caused by crystal report