使用栈

    1. #include <stack>
    2. using namespace std;
    3. class Solution {
    4. public:
    5. bool isValid(string s) {
    6. std::stack<char> strStack;
    7. for (auto c : s) {
    8. if (c == ')' && !strStack.empty() && strStack.top() == '(') {
    9. strStack.pop();
    10. continue;
    11. } else if (c == ')') {
    12. return false;
    13. }
    14. if (c == ']' && !strStack.empty() && strStack.top() == '[') {
    15. strStack.pop();
    16. continue;
    17. } else if (c == ']') {
    18. return false;
    19. }
    20. if (c == '}' && !strStack.empty() && strStack.top() == '{') {
    21. strStack.pop();
    22. continue;
    23. } else if (c == '}') {
    24. return false;
    25. }
    26. if (c == '(' | c == '[' | c == '{')
    27. strStack.push(c);
    28. }
    29. if (strStack.empty())
    30. return true;
    31. else
    32. return false;
    33. }
    34. };

    结果:
    执行结果:
    通过
    显示详情
    添加备注
    执行用时:0 ms, 在所有 C++ 提交中击败了100.00% 的用户
    内存消耗:6.2 MB, 在所有 C++ 提交中击败了34.22% 的用户
    通过测试用例:91 / 91

    C语言版本:

    1. bool isValid(char * s){
    2. char *stack=(char *)malloc(10000*sizeof(char));
    3. int top=0;
    4. for (int i=0;s[i]!='\0';++i) {
    5. if (top!=0&&((s[i]==')'&&stack[top-1]=='(')||(s[i]==']'&&stack[top-1]=='[')||(s[i]=='}'&&stack[top-1]=='{'))) {
    6. top--;
    7. }
    8. else {
    9. stack[top]=s[i];
    10. top++;
    11. }
    12. }
    13. if (top!=0) return false;
    14. return true;
    15. }

    leedcode通过:

    1. 执行用时:0 ms, 在所有 C 提交中击败了100.00% 的用户
    2. 内存消耗:6.2 MB, 在所有 C 提交中击败了5.01% 的用户
    3. 通过测试用例:91 / 91