[路飞]_leetcode-844-比较含退格的字符串

422 阅读2分钟

[题目地址] [B站地址]

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。

如果相等,返回 true ;否则,返回 false 。

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

示例 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 = "#a#c"
输出: true
解释: s 和 t 都会变成 “c”。

示例 4:

输入: s = "a#c", t = "b"
输出: false
解释: s 会变成 “c”,但 t 仍然是 “b”。

提示:

  • 1 <= s.length, t.length <= 200
  • s 和 t 只含有小写字母以及字符 '#'

进阶:

  • 你可以用 O(N) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?

本题只需要根据题意,处理两个字符串得到最后的结果,对比两个结果字符串是否相等即可

处理过程为创建数组 arr,用来存储每一个字符

遍历字符串,如果为 #,则将数组最后一位删除,否则将当前字符 push 到数组中

最后通过 arr.join('') 即可获取到 s 处理后的结果

代码如下:

var backspaceCompare = function(s, t) {
  // 创建数组存储处理过程中的字符
  let arr = [];
  // 处理 s 
  for(let i = 0;i<s.length;i++){
    if(s[i]==='#'){
      arr.pop();
    }else{
      arr.push(s[i])
    }
  }
  // 获取 s 处理后的结果
  s = arr.join('')
  // 重置 arr 
  arr = [];
  // 处理 t
  for(let i = 0;i<t.length;i++){
    if(t[i]==='#'){
      arr.pop();
    }else{
      arr.push(t[i])
    }
  }
  // 返回两个字符串处理后的结果是否相同
  return s===arr.join('')
};

至此我们就完成了 leetcode-844-比较含退格的字符串

如有任何问题或建议,欢迎留言讨论!