力扣844 比较含退格的字符串(C++,踩坑,逻辑问题,if短路)

题目

请点击

思路

其实思路没有多难的,想记录的是,自己太不留心了。本来是想把if语句的判断写到一起,结果。。。
起初写的是 if(!sta.empty()&&str[i]==’#’)
但这样有个问题呀,如果栈sta空了(!sta.empty()为假),那么倘若当前的str[i]是’#’,由于“短路”,此if语句直接就为假了,就去执行else字句,把’#'压入栈了。。

代码

错误代码

class Solution {
    
    
public:
    stack<char> moveToStack(string& str){
    
    
        stack<char> sta;
        int size = str.size();
        for(int i=0;i<size;i++){
    
    
            if(!sta.empty()&&str[i]=='#') sta.pop();
            else sta.push(str[i]);
        }
        return sta;
    }

    bool backspaceCompare(string s, string t) {
    
    
        stack<char> sta1 = moveToStack(s);
        stack<char> sta2 = moveToStack(t);

        while(!sta1.empty()&&!sta2.empty()){
    
    
            char tmp1 = sta1.top(); sta1.pop();
            char tmp2 = sta2.top(); sta2.pop();
            if(tmp1!=tmp2) return false;
        }
        return sta1.empty()&&sta2.empty();
    }
};

AC代码

class Solution {
    
    
public:
    stack<char> moveToStack(string& str){
    
    
        stack<char> sta;
        int size = str.size();
        for(int i=0;i<size;i++){
    
    
            if(str[i]=='#'){
    
    
                if(!sta.empty()) sta.pop();
            }
            else sta.push(str[i]);
        }
        return sta;
    }

    bool backspaceCompare(string s, string t) {
    
    
        stack<char> sta1 = moveToStack(s);
        stack<char> sta2 = moveToStack(t);

        while(!sta1.empty()&&!sta2.empty()){
    
    
            char tmp1 = sta1.top(); sta1.pop();
            char tmp2 = sta2.top(); sta2.pop();
            if(tmp1!=tmp2) return false;
        }
        return sta1.empty()&&sta2.empty();
    }
};

猜你喜欢

转载自blog.csdn.net/thwwu/article/details/123468298