【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
}
};*/