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

思路三

  • 利用正则替换
相关推荐
qystca4 分钟前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱4 分钟前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
今天吃饺子9 分钟前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
是阿建吖!10 分钟前
【优选算法】二分查找
c++·算法
王燕龙(大卫)14 分钟前
leetcode 数组中第k个最大元素
算法·leetcode
不去幼儿园1 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Mr_Xuhhh1 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
永乐春秋2 小时前
WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性
前端
鸽鸽程序猿2 小时前
【前端】CSS
前端·css
ggdpzhk2 小时前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js