题解 | #有效括号序列#

有效括号序列

https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

#include <stack>
class Solution {
  public:
    /**
     *
     * @param s string字符串
     * @return bool布尔型
     */
    bool isValid(string s) {
        stack<char> stk;
	    if(s.size()%2==1){return false;}
        for(int i=0;i<s.size();i++){
            switch (s[i]) {
                case '(':
                case '[':
                case '{':
                    stk.push(s[i]);
                    break;
                case ')':
                    if(stk.empty() || stk.top()!='('){
                        return false;
                    }else{
                        stk.pop();
                    }
                    break;
                case ']':
                    if(stk.empty() || stk.top()!='['){
                        return false;
                    }else{
                        stk.pop();
                    }
                    break;
                case '}':
                    if(stk.empty() || stk.top()!= '{'){
                        return false;
                    }else{
                        stk.pop();
                    }
                    break;            
            }
        }
        return stk.empty()?true:false;
    }
};

#include <stack>
class Solution {
  public:
    /**
     *
     * @param s string字符串
     * @return bool布尔型
     */
    bool isValid(string s) {
        // write code here
        stack<char> s1;
        int len = s.size();
        if (len % 2 == 1) {
            return false;
        }
        for (int i = 0; i < len; i++) {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
                s1.push(s[i]);
            } else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
                if (s1.empty()) {
                    return false;
                } else {
                    switch (s[i]) {
                        case ')':
                            if (s1.top() == '(') {
                                s1.pop();
                                break;
                            } else {
                                return false;
                            }
                        case ']':
                            if (s1.top() == '[') {
                                s1.pop();
                                break;
                            } else {
                                return false;
                            }
                        case '}':
                            if (s1.top() == '{') {
                                s1.pop();
                                break;
                            } else {
                                return false;
                            }
                        default:
                            return false;
                    }
                }
            } else {
                return false;
            }
        }
        if (s1.empty()) {
            return true;
        } else {
            return false;
        }

    }
};

这道题目是比较简单的题目,正常来说可能字符串里面还会有其他字符。我自己的解法是比较复杂的,但是这种括号的加减可以直接用switch来实现,效果比较好。注意的是,如果一开始栈空,并且输入的是右边括号)]},那么直接报错就行了。循环结束后,需要保证栈是空的,否则还是会有不匹配的括号,是错误的情况。

全部评论

相关推荐

菠落蜜:这个是系统自动投的,不是hr主动打招呼。更抽象的还有ai回复
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务