当前位置 博文首页 > sodaxyh的博客:【Leetcode-算法】844. 比较含退格的字符串(C++

    sodaxyh的博客:【Leetcode-算法】844. 比较含退格的字符串(C++

    作者:[db:作者] 时间:2021-08-25 15:42

    给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
    
    注意:如果对空文本输入退格字符,文本继续为空。
    

    思路:

    ? ? ? ? 两个思路。

    ? ? ? ? 第一种思路是用栈来保存退格处理后的字符串(#就弹出,否则压入)。然后比较两个栈中处理后的字符串是否一致。但这种算法会占用额外的空间,会提高空间复杂度。于是有了第二种思路。

    ? ? ? ? 第二种思路是用双指针。因为退格符只影响它前面的字符,不会影响后面的,所以可以从后往前遍历字符串,遇到退格符就skip字符即可,这种做法只需要常数级别的额外空间。

    AC代码:(思路二)

    class Solution {
    public:
        bool backspaceCompare(string S, string T) {
            int p=S.length()-1,q=T.length()-1;
            int cntS=0,cntT=0;
            
            while(p>=0 || q>=0){
                while(p>=0){
                    if(S[p]=='#') cntS++,p--;
                    else if(cntS>0) cntS--,p--;
                    else break;
                }
                while(q>=0){
                    if(T[q]=='#') cntT++,q--;
                    else if(cntT>0) cntT--,q--;
                    else break;
                }
    
                if(p>=0 && q>=0){
                    if(S[p]!=T[q]) return false;
                }else if(p>=0 || q>=0){
                    return false;
                }
                p--,q--;
            }
            return true;
        }
    };

    ?

    cs