首页 > 其他分享 >【844. 比较含退格的字符串】

【844. 比较含退格的字符串】

时间:2024-07-07 23:29:41浏览次数:17  
标签:slowIndex 844 int 字符串 长度 退格 指针

题目:

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。

示例 1:
输入:s = “ab#c”, t = “ad#c”
输出:true
解释:s 和 t 都会变成 “ac”。
示例 2:
输入:s = “ab##”, t = “c#d#”
输出:true
解释:s 和 t 都会变成 “”。
示例 3:
输入:s = “a#c”, t = “b”
输出:false
解释:s 会变成 “c”,但 t 仍然是 “b”。


思路:

  1. 首先要获取经过退格字符处理后的最终字符串s和字符串长度slowIndex。
    int delBackspace(string & s)利用&改变实参s,得到退格处理后的字符串。
    定义两个指针,快指针用来遍历原始字符串,慢指针用来存储处理后的字符串。
    遇到字母,两指针都向前一位,遇到#号,快指针向前一位,需要删除字符,所以慢指针后退一位(注意0位置)。
  2. 得到最终字符串后进行比较。
    若最终字符串长度不相等,返回false。
    长度相等则逐一比较。

代码:

class Solution {
public:
    bool backspaceCompare(string s, string t) {
        int s_length = delBackspace(s);
        int t_length = delBackspace(t);
        if(s_length != t_length) return false;
        else
        {
            for(int i = 0; i < s_length; i++)
            {
                if(s[i] != t[i]) return false;
            }
        }
        return true;
    }

private:
    // 获取退格处理后的最终字符串长度slowIndex,并且利用&改变实参s,得到退格处理后的字符串
    int delBackspace(string & s)
    {
        // 慢指针代表退格后的字符串长度
        // 快指针遍历字符串
        int slowIndex = 0;
        for(int fastIndex = 0; fastIndex < s.size(); fastIndex++)
        {
            // 遇到字母,两指针都向前一位
            if(s[fastIndex] != '#')
            {
                s[slowIndex++] = s[fastIndex];
            }
            // 遇到#号,快指针向前一位,慢指针后退一位(注意0位置)。
            else
            {
                if(slowIndex > 0)
                {
                    slowIndex--;
                }

            }
        }
        return slowIndex;
    }
};

总结:

时间复杂度:O(A+B+C),其中 A 和 B 分别为字符串 S 和 T 的长度,C代表处理后的字符串长度。我们需要遍历两字符串和处理后的字符串各一次。
空间复杂度:O(1)。对于每个字符串,我们只需要定义一个指针和长度即可。

  1. 首先要获取经过退格字符处理后的最终字符串s和字符串长度slowIndex。
  2. 得到最终字符串后进行比较。

标签:slowIndex,844,int,字符串,长度,退格,指针
From: https://blog.csdn.net/yuan_2001_/article/details/140253851

相关文章

  • 生信算法9 - 正则表达式匹配氨基酸序列、核型和字符串
    建议在Jupyter实践。1.使用正则表达式匹配指定的氨基酸序列importre#氨基酸序列seq='VSVLTMFRYAGWLDRLYMLVGTQLAAIIHGVALPLMMLI'#正则表达式匹配match=re.search(r'[A|G]W',seq)#打印match及匹配到开始位置和结束位置print(match)#<re.Matchobject;......
  • leetcode678:有效的括号字符串
    给你一个只包含三种字符的字符串,支持的字符类型分别是 '('、')' 和 '*'。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。有效 字符串符合如下规则:任何左括号 '(' 必须有相应的右括号 ')'。任何右括号 ')' 必须有相应的左括号 '(' 。左括......
  • Redis基本命令源码解析-字符串命令
    1.set用于将kv设置到数据库中2.mset批量设置kvmset(msetnx)key1value1key2value2...mset:msetCommandmsetnx:msetnxCommandmsetCommand和msetnxCommand都调用msetGenericCommand2.1msetGenericCommand如果参数个数为偶数,则响应参数错误并返回如果nx=1,则......
  • L1-050 倒数第N个字符串
    给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为L,从L个a开始,以1为步长递增。例如当L为3时,序列为{aaa,aab,aac,...,aaz,aba,abb,...,abz,...,zzz}。这个序列的倒数第27个字符串就是zyz。对于任意给定的L,本题要......
  • 仅做笔记用:base64字符串转换为十六进制形式表示的二进制数据
    使用JavaScript实现一个函数,参数是一个base64的字符串,将这个字符串解析成二进制数据,并将这个二进制数据的每个字节以一个十六进制两位数表示出来,每个字节的十六进制两位数之间空一格,每行16个字节,返回整理好的十六进制形式。functionbase64ToHex(base64Str){//解析ba......
  • C语言实现字符串排序
    如果只有英文字符且不区分大小写的话按照字典序排序可以用strcmp函数,两个字符串自左向右逐个字符相比(按ASCII值大小相比较)strcmp(s1,s2)当s1<s2时,返回为负数;当s1==s2时,返回值=0;当s1>s2时,返回正数。例如"A"<"C"、"d">"D"、"computer">"compare"如果想要不区分大小写的......
  • c++字符串知识总结
    读字符串函数fgets功能:从文件中读取字符串,每次只读取一行。注意:fgets每次最多只能读取n-1个字2.符,第n个为NULL。当遇到换行符或者EOF时,即使当前位置在n-1之前也读出结束。若函数返回成功,则返回字符串数组str的首地址。例:小L很喜欢听私人笑声,可是有些歌曲他没有夹带私人笑......
  • 力扣第7题:整数反转 字符串函数综合运用(C++)
    给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例3:......
  • 字符串分隔
    描述•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(每个字符串长度小于等于100)输出描述:依次输出所有分割后的长度为8的新字符串比较笨的一个方法:有更好的建议欢迎......
  • send_file(image_path, mimetype=‘image/jpg‘) 如何再传递一个字符串
      欢迎关注我......