前端算法小白攻略22-leetcode(比较退格的字符串)

230 阅读1分钟

前言

today来模拟下键盘的的操作过程,当然我们只是简单的模拟下退格键,纯输入文本字符串而已,当然,要利用一下栈的数据结构来处理,话不多说,进正题。

题目描述

844. 比较含退格的字符串

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

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

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

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:S 和 T 都会变成 “ac”。

示例 2:

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 “”。

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

解题思路

  1. 用栈做个字符编辑器,分别输入两个给定字符串看结果是否相等即可
  2. 遇到非退格键输入的时候直接执行入栈操作,如果是退格键那么还要判断当前栈是否为空,如果是空不执行任何操作,不为空就pop栈顶元素即可。

开始解题

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var backspaceCompare = function(s, t) {
   return inputStr(s) === inputStr(t);
};

var inputStr = function(str) {
    let stack = [];
    for(char of str) {
       if(char === '#'){    
           if(stack.length) {  // 字符为退格键且栈顶元素不为空执行pop操作
               stack.pop();
           }
       }else {
           stack.push(char); // 非#即可入栈
       } 
    }
    return stack.join('');
}