每日一题
请按以下要求实现方法fn,遇到退格字符就删除前面的字符,遇到俩个退格就删除俩个字符:
// 比较含有退格的字符串,"<-"代表退格键,"<"和"-"均为正常字符
// 输入:"a<-b<-", "c<-d<-",结果:true,解释:都为""
// 输入:"<-<-ab<-", "<-<-<-<-a",结果:true,解释:都为"a"
// 输入:"<-<ab<-c", "<<-<a<-<-c",结果:false,解释:"<ac" !== "c"
function fn(str1, str2) { }
思路一:
- 在字符串中找到连续的 “<-” 字符,然后删除其前面的字符
- 定义一个function专门来处理这样的字符串
- 最后对比转换后的子串。
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('');
思路二:
- 用一个临时数组来成就符合条件的字符
- 碰到删除键就删除掉这个字符
- 然后直接跳跃到下下个字符在判断
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
思路三
- 利用正则替换