力扣 (LeetCode)题目,有效的括号

题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合

思路:

把字符串的元素依次放到栈里,遇到匹配的括号就抵消,否则照常放到栈里,最后检查栈里元素的个数,为0就返回true,否则返回false

代码如下:

#include<iostream>
#include<stack>
using namespace std;

class Solution {
public:
    bool isValid(string s) {
        char temp;
        stack<char> stk;
        for (int i = 0; i < s.size(); i++) {
            if (stk.size() == 0) stk.push(s[i]);
            else {
                char tt = stk.top();
                char tts = s[i];
                bool ok1 = ((stk.top() == '(') && s[i] == ')');
                bool ok2 = ((stk.top() == '[') && s[i] == ']');
                bool ok3 = ((stk.top() == '{') && s[i] == '}');
                if (ok1 || ok2 || ok3)  stk.pop();
                else  stk.push(s[i]);
            }
        }
        if (stk.size() > 0) return false;
        return true;
    }
};

 

posted @ 2021-02-08 19:07  田埂  阅读(77)  评论(0编辑  收藏  举报