【编程题】合法括号的判断

合法括号的判断—难度:⭐⭐

【编程题】合法括号的判断_第1张图片

我的答案:错误

class Parenthesis {
  public:
    bool chkParenthesis(string A, int n) {
// write code here
        if (n % 2 != 0) {
            return false;
        }
        stack<char> st;
        auto ch = A.begin();
// cout<<"hello?"<
        A.push_back(' ');
        while (ch < A.end()) {
            if (*ch != '(' && *ch != ')') {
                return false;
            }
            if (*ch == '(') {
//cout<<*ch<
                while (*ch == '(') {
                    st.push(*ch);
                    ch++;
                }
                if (*ch == ')') {
                    while (*ch == ')') {
                        st.pop();
                        ch++;
                    }
                } else return false;
            } else {
                while (*ch == '(') {
                    st.push(*ch);
                    ch++;
                }
                if (*ch == ')') {
                    while (*ch == ')') {
                        st.pop();
                        ch++;
                    }
                } else return false;
            }
        }
        if (!st.empty()) {
            return true;
        }
        return false;
    }
};

错误点

  • 解题思路正确,若匹配到左扩号,则入栈,若一直是左括号就一直入栈,若遇到右括号就弹栈抵消
  • 编码错误,对思路进行代码化的能力欠缺
  • 对思路进行整理后重新编码:

我的答案:修正版

class Parenthesis {
  public:
    bool chkParenthesis(string A, int n) {
// write code here
        
        if (n % 2 != 0) {
            return false;
        }
        stack<char> st;
        auto ch = A.begin();
// cout<<"hello?"<
        
        while (ch < A.end()) {
            if (*ch == '(') {
//cout<<*ch<
                while (*ch == '(') {
                    st.push(*ch);
                    ch++;
                }
            } 
            else
            {
                return false;
            }
            if (*ch == ')') {
                    while (*ch == ')') {
                        if(!st.empty())
                        {
                            st.pop();
                            ++ch;
                        }
                        else
                        {
                            return false;
                        }
                    }
                } else return false;
            
        }
        if (st.empty()) {
            return true;
        }
        return false;
}
};

标准答案:switch语句直接搞定

class Parenthesis {
public:
    bool chkParenthesis(string A, int n) {
        // write code here
        stack<char> st;
        for(auto ch:A)
        {
            switch(ch)
            {
                case '(':
                st.push(ch);
                break;

                case ')':
                if(st.empty())
                {
                    return false;
                }
                st.pop();
                break;

                default:
                return false;
            }
        }
        return st.empty();
    }
};

你可能感兴趣的:(学习)