目录

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

思路三

  • 利用正则替换
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
雪落满地香23 分钟前
css:圆角边框渐变色
前端·css
whltaoin1 小时前
Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解
java·算法
风无雨2 小时前
react antd 项目报错Warning: Each child in a list should have a unique “key“prop
前端·react.js·前端框架
人无远虑必有近忧!2 小时前
video标签播放mp4格式视频只有声音没有图像的问题
前端·video
梭七y3 小时前
【力扣hot100题】(032)排序链表
算法·leetcode·链表
SsummerC3 小时前
【leetcode100】数组中的第K个最大元素
python·算法·leetcode
编程绿豆侠3 小时前
力扣HOT100之链表:206. 反转链表
算法·leetcode·链表
永恒迷星.by4 小时前
文件操作(c语言)
c语言·c++·算法·文件操作
还有你Y4 小时前
MIMO预编码与检测算法的对比
算法·预编码算法
凯强同学5 小时前
第十四届蓝桥杯大赛软件赛省赛Python 大学 C 组:7.翻转
python·算法·蓝桥杯