每日一题:实现方法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

思路三

  • 利用正则替换
相关推荐
~|Bernard|5 分钟前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师7 分钟前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo39 分钟前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
weixin_4378309438 分钟前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
超级无敌攻城狮38 分钟前
3 分钟学会!波浪文字动画超详细教程,从 0 到 1 实现「思考中 / 加载中」高级效果
前端
好家伙VCC1 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
excel1 小时前
用 TensorFlow.js Node 实现猫图像识别(教学版逐步分解)
前端
gnip2 小时前
JavaScript事件流
前端·javascript
小菜全2 小时前
基于若依框架Vue+TS导出PDF文件的方法
javascript·vue.js·前端框架·json
赵得C2 小时前
【前端技巧】Element Table 列标题如何优雅添加 Tooltip 提示?
前端·elementui·vue·table组件