您的位置:首页 > 其它

[leetcode]: 20. Valid Parentheses

2017-06-04 11:25 405 查看

1.题目

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.

判断字符串中的括号是否匹配

2.分析

需要用到-栈

遍历字符串,对于当前字符:

如果是(,{,[,则入栈

如果是),},],则比较栈顶元素与当前字符是否匹配。

3.代码

bool isValid(string s) {
stack<int> myStack;
for (auto c : s) {
if (c == '(' || c == '{' || c == '[')//左括号,入栈
myStack.push(c);
else//右括号,比较栈顶元素
{
if (!myStack.empty()) {
char left = myStack.top();
cout << left << " " << c << endl;
if ((left == '('&&c == ')') || (left == '{'&&c == '}') || (left == '['&&c == ']'))
myStack.pop();
else//不匹配
return false;
}
else
return false;
}
}
return myStack.empty();
}


或者这样写,更容易明了一些

bool isValid(string s) {
stack<char> myStack;
for (auto c : s) {
if (c == '(')
myStack.push(')');
else if (c == '{')
myStack.push('}');
else if (c == '[')
myStack.push(']');
else
if (!myStack.empty() && c == myStack.top())
myStack.pop();
else
return false;
}
return myStack.empty();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode