C ++中简单堆栈问题的出乎意料的答案

问题描述

class Solution {
public:
bool isValid(string s) {
    map<char,char> m;
    m[')'] = '(';
    m['}'] = '{';
    m[']'] = '[';
    
    stack<char> st;
    
    if(s[0] != '(' || s[0] != '{' || s[0] != '[')
        return "false";
    
    for(int i = 0; i<s.length(); i++)
    {
        if(s[i] == '(' || s[i]== '{' || s[i]== '[')
        {
            st.push(s[i]);
        }
        else if(st.top() == m[s[i]])
        {
            st.pop();
        }
        else if(st.top() != m[s[i]])
        {
            return "false";
        }

    }
    
    if(st.empty())
        return "true";
    else
        return "false";
}
};

对于诸如“(]”这样的基本示例,代码失败。我不知道这是怎么可能的。

  1. (首先进入堆栈

  2. (不是]的地图

因此它应该返回“ false”。但它返回true。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)