使用栈
#include <stack>
using namespace std;
class Solution {
public:
bool isValid(string s) {
std::stack<char> strStack;
for (auto c : s) {
if (c == ')' && !strStack.empty() && strStack.top() == '(') {
strStack.pop();
continue;
} else if (c == ')') {
return false;
}
if (c == ']' && !strStack.empty() && strStack.top() == '[') {
strStack.pop();
continue;
} else if (c == ']') {
return false;
}
if (c == '}' && !strStack.empty() && strStack.top() == '{') {
strStack.pop();
continue;
} else if (c == '}') {
return false;
}
if (c == '(' | c == '[' | c == '{')
strStack.push(c);
}
if (strStack.empty())
return true;
else
return false;
}
};
结果:
执行结果:
通过
显示详情
添加备注
执行用时:0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗:6.2 MB, 在所有 C++ 提交中击败了34.22% 的用户
通过测试用例:91 / 91
C语言版本:
bool isValid(char * s){
char *stack=(char *)malloc(10000*sizeof(char));
int top=0;
for (int i=0;s[i]!='\0';++i) {
if (top!=0&&((s[i]==')'&&stack[top-1]=='(')||(s[i]==']'&&stack[top-1]=='[')||(s[i]=='}'&&stack[top-1]=='{'))) {
top--;
}
else {
stack[top]=s[i];
top++;
}
}
if (top!=0) return false;
return true;
}
leedcode通过:
执行用时:0 ms, 在所有 C 提交中击败了100.00% 的用户
内存消耗:6.2 MB, 在所有 C 提交中击败了5.01% 的用户
通过测试用例:91 / 91