一、题目描述
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
示例 1:
输入: name = "alex", typed = "aaleex"
输出: true
解释: 'alex' 中的 'a' 和 'e' 被长按。
示例 2:
输入: name = "saeed", typed = "ssaaedd"
输出: false
解释: 'e' 一定需要被键入两次,但在 typed 的输出中不是这样。
提示:
1 <= name.length, typed.length <= 1000name和typed的字符都是小写字母
二、思路分析
- 定义一个指针,从
name开始匹配,用name的值和typed值进行比较,只会有两种情况:- 和
cur相等 - 和
cur不相等
- 和
- 如果相等,就让
index++,并且保存旧值,prev=cur,cur从下一个值开始 - 如果不相等,就看这个值是否和上一个值相等,如果也不相等,则直接返回false
- 最后当
index=name.length时,表示name都已经匹配完了
三、代码答案
/**
* @param {string} name alex
* @param {string} typed aaleex
* @return {boolean}
*/
var isLongPressedName = function (name, typed) {
let cur = ''
let index = 0
let prev = ''
cur = name[0]
for (var i = 0; i < typed.length; i++) {
let str = typed[i]
if (str === cur) {
prev = cur
cur = name[++index]
} else {
if (prev !== str) {
return false
}
}
}
return index === name.length
};