长按键入-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 的输出中不是这样。

 

解题思路:

  1. name用指针p进行遍历
  2. typed用双指针pre和cur遍历
  3. 指针p和指针cur指向的字符相同时,pre记录cur,然后让俩个指针同时向前移动
  4. 不同时,比较pre和cur指向的字符是否相同。若相同则说明是被重复键入,cur可以继续向前移动;若不同则说明键入错误,返回false
  5. 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
  }
}

 

posted on 2020-10-21 20:34  尘光  阅读(136)  评论(0)    收藏  举报

导航