LeetCode:20.有效的括号

20.有效的括号

  • 给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。
  • 有效字符串需满足:
    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

括号匹配

利用 栈 的特性(先进后出)来求解问题,遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,看是否匹配

我平时使用vector比较多,所以我使用 vector容器来模拟 栈 的效果。

代码实现
private:
    //将右括号转化为相对应的左括号,用于进行匹配
    char rightToLeft(char c) {
        if (c == ')') return '(';
        if (c == '}') return '{';
        else { return '['; }
    }
public:
    bool isValid(string s) {
        int nStrLength = s.size();
        vector<char> vLeft;
        for (int i = 0; i < nStrLength; i++) {
            if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
                vLeft.push_back(s[i]);  //遇到左括号就插入vector中
            }
            else {
                char cRtoL = rightToLeft(s[i]);
                //vLeft.size() == 0这个判断是防止出现类似"(){}]"的形式,避免读取到右括号时,没有左括号来进行配对
                if (vLeft.size() != 0 && cRtoL == vLeft.back())  
                {
                    vLeft.pop_back();   //右括号匹配vector最后一个元素的左括号就移除该左括号
                }
                else {
                  return false;
                }
                
            }
        }

        //if(vLeft.size()==0)     //这个判断是防止出现类似"(){"的形式,避免有多余的左括号
        //    return true;
        //else {
        //    return false;
        //}
        return vLeft.empty();   //一句顶上面四句,还要努力呀
        
    }

时间复杂度: O ( n ) O(n) O(n),空间复杂度: O ( n ) O(n) O(n)

LeetCode提交结果:执行用时:0ms;内存消耗:6.1MB

你可能感兴趣的:(LeetCode刷题记录,leetcode,算法)