力扣刷题——844.比较含退格的字符串

给定 st 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true# 代表退格字符。

**注意:**如果对空文本输入退格字符,文本继续为空。

示例 1:

复制代码
输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

虽然是一道easy题,但是要做到O(1)的额外空间,就不能使用暴力解法

于是我思考,两个数组都从后往前遍历,当出现'#'字符时,可以记录它出现的次数,从而进行退格操作

第一次提交代码

cpp 复制代码
class Solution {
public:
    bool backspaceCompare(string s, string t) {
        int slen=s.size();
        int tlen=t.size();
        int i=slen-1;
        int j=tlen-1;
        while(i>=0||j>=0)
        {
           
            int n1=0,n2=0;
            while(i>=0&&s[i]=='#')
            {
                n1++;
                i--;
            }
            while(i>=0&&n1>0)
            {
                
                if(s[i]=='#') n1++;
                else n1--;
                i--;
            }
             while(j>=0&&t[j]=='#')
            {
                n2++;
                j--;
            }
            while(j>=0&&n2>0)
            {
                
                if(t[j]=='#') n2++;
                else n2--;
                j--;
            }
           
            if (i >= 0 && j >= 0) {
            if (s[i] != t[j]) {
                return false;
            }
        }

            i--;
            j--;
        }

        return true;
    }
};

结果是,我没有正确处理一个字符串已经遍历完,而另一个字符串还有字符的情况。当 ij 其中一个小于 0 时,代码没有进行相应的判断,就直接继续循环,可能会导致错误的结果。例如,当 s 已经处理完所有有效字符(i < 0),而 t 还有有效字符(j >= 0)时,应该返回 false,但当前代码没有处理这种情况。

修改后

cpp 复制代码
class Solution {
public:
    bool backspaceCompare(string s, string t) {
        int slen=s.size();
        int tlen=t.size();
        int i=slen-1;
        int j=tlen-1;
        int n1=0,n2=0;
        while(i>=0||j>=0)
        {
           
            
           
            while(i>=0)
            {
                
                if(s[i]=='#') n1++,i--;
                else if(n1>0) n1--,i--;
                else break;
            }
            
            while(j>=0)
            {
                
                if(t[j]=='#') n2++,j--;
                else if(n2>0) n2--,j--;
                else break;
            }
           
            if (i >= 0 && j >= 0) {
            if (s[i] != t[j]) {
                return false;
            }
           
        }
        else if(i>=0||j>=0)
        return false;

            i--;
            j--;
        }

        return true;
    }
};
相关推荐
2401_8769075213 分钟前
IEC 61347-1:2015 灯控制装置安全标准详解
大数据·数据结构·人工智能·算法·安全·学习方法
T.Ree.28 分钟前
【数据结构】_排序
数据结构·算法·排序算法·排序
二进制的Liao31 分钟前
【数据分析】什么是鲁棒性?
运维·论文阅读·算法·数学建模·性能优化·线性回归·负载均衡
这儿有一堆花3 小时前
比特币:固若金汤的数字堡垒与它的四道防线
算法·区块链·哈希算法
客卿1233 小时前
力扣100-移动0
算法·leetcode·职场和发展
CM莫问6 小时前
<论文>(微软)WINA:用于加速大语言模型推理的权重感知神经元激活
人工智能·算法·语言模型·自然语言处理·大模型·推理加速
计信金边罗8 小时前
是否存在路径(FIFOBB算法)
算法·蓝桥杯·图论
MZWeiei8 小时前
KMP 算法中 next 数组的构建函数 get_next
算法·kmp
Fanxt_Ja9 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法
luofeiju9 小时前
行列式的性质
线性代数·算法·矩阵