每日一题
请按以下要求实现方法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
思路三
- 利用正则替换