您的位置:首页 > 其它

[LeetCode]20. Valid Parentheses

2017-10-07 22:02 453 查看

Description

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.

Discussion

括号匹配问题。这个问题我们可以使用一个栈
myStack
来完成。当元素为左括号时,把该元素压栈。当元素为右括号时,弹出栈顶元素并与该元素进行比较,若不是一对,则整个字符串不匹配。最后我们还需要判断一下栈是否为空,若不为空,说明有多余左括号没有配对,则整个字符串不匹配。

算法的时间复杂度为
O(n)


C++ Code

class Solution {
public:
bool isValid(string s) {
stack<char> myStack;        //定义一个栈,当前字符若是左括号,则压栈;若是右括号,则弹栈并进行比较
//对字符串的每个元素进行判断
for(int i = 0; i < s.length(); i++)
{
//当前字符若是左括号,则压栈
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
myStack.push(s[i]);
continue;
}
//当前字符若是右括号,且栈内没有元素,则不匹配
if(myStack.size() == 0)
{
return false;
}
//当前字符若是右括号,从栈中弹出一个元素进行比较
switch(s[i])
{
case ')':
if(myStack.top() == '(')
myStack.pop();
else
return false;
break;
case ']':
if(myStack.top() == '[')
myStack.pop();
else
return false;
break;
case '}':
if(myStack.top() == '{')
myStack.pop();
else
return false;
break;
}
}
//最后若是栈内还有元素,说明有多余左括号
if(myStack.size() == 0)
return true;
else
return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 括号匹配