【力扣】925.长按键入

120 阅读1分钟

一、题目描述

你的朋友正在使用键盘输入他的名字 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 <= 1000
  • name 和 typed 的字符都是小写字母

二、思路分析

  1. 定义一个指针,从name开始匹配,用name的值和typed值进行比较,只会有两种情况:
    • cur相等
    • cur不相等
  2. 如果相等,就让index++,并且保存旧值,prev = curcur 从下一个值开始
  3. 如果不相等,就看这个值是否和上一个值相等,如果也不相等,则直接返回false
  4. 最后当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
};