**
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.
运行效果图:
实现方法:
#include <stack>
class Solution {
public:
bool isValid(string s) {
stack<char> st;
bool ret = true;
int tmp = 0;
char temp = 0;
for(int i = 0; i < s.length(); i++)
{
if(isLeft(s[i]) != 0)
{
tmp = isLeft(s[i]);
if(tmp == 1 || tmp == 2 || tmp == 3){
st.push(s[i]);
}
if(tmp == -1)
{
if(st.empty() == 1)
{
ret = false;
goto End;
}
temp = st.top();
st.pop();
if(isRight(s[i]) != isLeft(temp))
{
ret = false;
goto End;
}
}
}
}
if(st.empty() != 1)
ret = false;
End:
return ret;
}
int isRight(char a)
{
int ret = 0;
if(a == '}'){
ret = 3;
goto End;
}
if(a == ']'){
ret = 2;
goto End;
}
if(a == ')'){
ret = 1;
goto End;
}
End :
return ret;
}
int isLeft(char a)
{
int ret = 0;
if(a == '{'){
ret = 3;
goto End;
}
if(a == '['){
ret = 2;
goto End;
}
if(a == '('){
ret = 1;
goto End;
}
if(a == '}'||a == ']'||a == ')')
{
ret = -1;
goto End;
}
End :
return ret;
}
};
经典分析:
#include <stack>
class Solution {
public:
bool isValid(string s) {
stack<char> paren;
for (char& c : s) {
switch (c) {
case '(':
case '{':
case '[': paren.push(c); break;
case ')':
if (paren.empty() ||paren.top()!='(')
return false;
else
paren.pop(); break;
case '}':
if (paren.empty() ||paren.top()!='{')
return false;
else paren.pop(); break;
case ']':
if (paren.empty() || paren.top()!='[')
return false;
else paren.pop(); break;
default: ; // pass
}
}
return paren.empty() ;
}
};
感谢Leetcode用户: chammika
几个技巧性的用法:
- 1、for (char& c : s):
强类型遍历s字符串:
相当于C++的:
for( int i = 0; i < s.length(); i++)
{ s[i]....
}
2、在switch中对问题的抽象过程
case ')':
if (paren.empty() ||paren.top()!='(')
return false;
else
paren.pop(); break;
case '}':
if (paren.empty() ||paren.top()!='{')
return false;
else paren.pop(); break;
case ']':
if (paren.empty() || paren.top()!='[')
return false;
else paren.pop(); break;
总结:
本题考查的是栈的用法,同时就是算法的灵活性,如何精简代码是本题提升性能的一个要点。