
这里思想比较麻烦,先转为队列,再利用队列的先进先出,从字符串的第一位开始将两者比较完的的元素删除, 同时记录删除的元素,以便于判断typed字符串里面重复的字符,如果有重复字符,则删除该字符
/**
* @param {string} name
* @param {string} typed
* @return {boolean}
*/
var isLongPressedName = function(name, typed) {
if(typed === null || typed.length < name.length){
return false;
}
let queue1 = [],queue2 = [];
for(let i =0; i<name.length;i++){ // 转为队列
queue1.push(name[i]);
}
for(let i =0; i<typed.length;i++){ // 转为队列
queue2.push(typed[i]);
}
let queue2_del = '', queue1_del = '';
while(queue2.length > 0){
if(queue2[0] === queue2_del && queue1[0] !== queue1_del){ // 删除typed中重复字符
queue2_del = queue2[0];
queue2.shift();
continue;
}
queue1_del = queue1[0];
queue2_del = queue2[0];
if(queue1_del === queue2_del){ // 两者相等,同时删除
queue1.shift();
queue2.shift();
} else {
return false;
}
}
if(queue1.length > 0) return false;
return true;
};
该题还有个双指标法,比较适合使用,后面有时间补充
网友评论