【LeetCode & 剑指offer刷题】字符串题11:Valid Parentheses(括号对)
【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)
Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
-
Open brackets must be closed by the same type of brackets.
-
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
/*问题:有效括号对判断
#include<stack> 在该环境下已经包含
方法一:
左括号入栈,右括号消解使栈顶元素出栈,若右括号不能与栈顶元素匹配,则返回false
*/
class Solution
{
public:
bool isValid(string s)
{
stack<char> stk;
for(auto c: s)
{
switch(c)
{
case '(':
case '{':
case '[':
stk.push(c);break; //左括号入栈
case ')':
if(stk.empty() || stk.top()!='(') //如果栈顶元素为不匹配的括号时,说明不能构成括号对(如example 4)
return false;
else
stk.pop();break; //右括号时原左括号被消解出栈
case '}':
if(stk.empty() || stk.top()!='{')
return false;
else
stk.pop();break;
case ']':
if(stk.empty() || stk.top()!='[')
return false;
else
stk.pop();break;
}
}
return stk.empty(); //消解完后看栈中是否还有元素,如果还有则为false
}
};
//方法二
/*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();
}
}
return stk.empty(); //消解完后看栈中是否还有元素,如果还有则为false
}
};*/