每日一题:实现方法fn,遇到退格字符就删除前面的字符,遇到俩个退格就删除俩个字符

每日一题

请按以下要求实现方法fn,遇到退格字符就删除前面的字符,遇到俩个退格就删除俩个字符:

javascript 复制代码
// 比较含有退格的字符串,"<-"代表退格键,"<"和"-"均为正常字符 
// 输入:"a<-b<-", "c<-d<-",结果:true,解释:都为"" 
// 输入:"<-<-ab<-", "<-<-<-<-a",结果:true,解释:都为"a" 
// 输入:"<-<ab<-c", "<<-<a<-<-c",结果:false,解释:"<ac" !== "c" 
function fn(str1, str2) { }

思路一:

  • 在字符串中找到连续的 "<-" 字符,然后删除其前面的字符
  • 定义一个function专门来处理这样的字符串
  • 最后对比转换后的子串。
javascript 复制代码
function fn(str1,str2){
  let leftr = FromatStr(str1);
  let right = FromatStr(str2);
  return leftr == right;
}

function FromatStr(str){
  let arr = str.split('');
  for(let i=0;i<arr.length-1;i++){
    if(arr[i]=='<' && arr[i+1]=='-'){
      if(arr[i-1]){
        arr.splice(i-1,3,'');//添加''是防止索引塌陷
      }else{
        arr.splice(i,2,'');//添加''是防止索引塌陷
      }
    }
  }
  return arr.join('');

思路二:

  • 用一个临时数组来成就符合条件的字符
  • 碰到删除键就删除掉这个字符
  • 然后直接跳跃到下下个字符在判断
javascript 复制代码
function fn(str1,str2){
  let leftr = FromatStr(str1);
  let right = FromatStr(str2);
  return leftr == right;
}

function FromatStr(str){
  let arr = [];
  for(let i=0;i<str.length;i++){
    if(str[i]=='<' && str[i+1]=='-'){
      i++;//直接跳跃到下下个字符在判断
      arr.pop();
    }else{
      arr.push(str[i]);
    }
  }
  return arr.join('');
}


let result = fn("-a<-b<-","c<-d<-");
console.log(result);//false

思路三

  • 利用正则替换
相关推荐
阿珊和她的猫2 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
PAK向日葵4 小时前
【算法导论】PDD 0817笔试题题解
算法·面试
加班是不可能的,除非双倍日工资6 小时前
css预编译器实现星空背景图
前端·css·vue3
地平线开发者6 小时前
ReID/OSNet 算法模型量化转换实践
算法·自动驾驶
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
地平线开发者6 小时前
开发者说|EmbodiedGen:为具身智能打造可交互3D世界生成引擎
算法·自动驾驶
gnip7 小时前
vite和webpack打包结构控制
前端·javascript
excel7 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
星星火柴9367 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端