题目
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列。
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
数据范围:字符串长度 0≤n≤10000
要求:空间复杂度 O(n),时间复杂度 O(n)
示例1
输入:
"["
返回值:
false
示例2
输入:
"[]"
返回值:
true
示例3
输入:
"{{"
返回值:
false
思路
使用一个辅助栈,每次遇到'(','{','['这三种字符的时候,将字符入栈;而每次遇到')','}',']'这三种字符的时候则让对应的匹配字符出栈。
解答代码
class Solution {
public:
/**
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
auto size = s.size();
if (size == 0 || size % 2 == 1) {
return false;
}
stack<char> tmp;
for (int i = 0; i < size; i++) {
if ('(' == s[i] || '{' == s[i] || '[' == s[i]) {
tmp.push(s[i]);
} else if (')' == s[i]) {
if (tmp.empty() || tmp.top() != '(') {
return false;
}
tmp.pop();
} else if ('}' == s[i]) {
if (tmp.empty() || tmp.top() != '{') {
return false;
}
tmp.pop();
} else if (']' == s[i]) {
if (tmp.empty() || tmp.top() != '[') {
return false;
}
tmp.pop();
}
}
// 退出循环后需保证栈内没有元素才是有效的
if (!tmp.empty()) {
return false;
}
return true;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。