长按键入-leetcode(925)
长按键入 LeetCode-长按键入(925)
你的朋友正在使用键盘输入他的名字 name
。偶尔,在键入字符 c
时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed
。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True
。
示例 1: 输入:name = "alex", typed = "aaleex" 输出:true 解释:'alex' 中的 'a' 和 'e' 被长按。 示例 2: 输入:name = "saeed", typed = "ssaaedd" 输出:false 解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。
解题思路:
- name用指针p进行遍历
- typed用双指针pre和cur遍历
- 指针p和指针cur指向的字符相同时,pre记录cur,然后让俩个指针同时向前移动
- 不同时,比较pre和cur指向的字符是否相同。若相同则说明是被重复键入,cur可以继续向前移动;若不同则说明键入错误,返回false
- name遍历完后,看typed是否有剩余,若有则看是否是name最后一个字符的重复键入
var isLongPressedName = function(name, typed) { var pre = '' var cur = '' var p = '' var i = 0, j = 0 while (i < name.length) { p = name[i] cur = typed[j] if (p === cur) { pre = cur i++ j++ } else { if (pre === cur) { j++ } else { return false } } } var reg = new RegExp('[^' + p + ']') typed = typed.slice(j) if (reg.test(typed)) { return false } else { return true } }