[路飞]_LeetCode题844比较含退格的字符串

330 阅读1分钟

题目描述

给定 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 只含有小写字母以及字符 '#'

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ba… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  1. 循环两个字符串,以长度最长的作为循环长度。
  2. 用两个数组作为栈用来模拟在文本编辑器的打印过程。
  3. 遇到“#”吐出前一位,不是“#”则推入一位,s和t均如此,直到结束。
  4. 最后还原所有有效字符后的字符串比较。

题解代码

 * @lc app=leetcode.cn id=844 lang=javascript
 *
 * [844] 比较含退格的字符串
 */

// @lc code=start
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var backspaceCompare = function(s, t) {
  let sArr=[];//接收s最终的应该显示的所有字符
  let tArr=[];//接收t最终的应该显示的所有字符
  let length = s.length > t.length? s.length : t.length;//取二者最长的最为循环条件
  for (let i = 0; i < length; i++) {
    //遇到“#”吐出前一位
    //不是“#”则推入一位
    //s和t均如此,直到结束
    if(s[i] && s[i] !== "#"){
      sArr.push(s[i]);
    }else if(s[i] && s[i] === "#"){
      sArr.pop();
    }
    if(t[i] && t[i] !== "#"){
      tArr.push(t[i]);
    }else if(t[i] && t[i] === "#"){
      tArr.pop();
    }
  }
  //最后还原所有有效字符后的字符串比较
  return sArr.toString() === tArr.toString();
};
// @lc code=end