zoukankan      html  css  js  c++  java
  • 925.长按键入

    2020-04-23
    长按键入

    你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,

    按键可能会被长按,而字符可能被输入 1 次或多次。

    你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字

    (其中一些字符可能被长按),那么就返回 True。

    题解:
    思路1:按块分组

    对于字符串 S = 'aabbbbccc',可以把表示成这种分组形式 - groupify(S) = [['a', 2], ['b', 4], ['c', 3]],

    其中 'abc' 为 键值,[2, 4, 3] 为连续出现的次数。

    对于一个长按键入的 typed 来说,依次每个字母连续出现的次数一定大于等于 name 中连续字母出现的次数。

    举个例子,'aaleex' 是 'alex' 其中一种长按键入的名字: 首先把它们分别变成

    [['a', 2], ['l', 1], ['e', 2], ['x', 1]] 和 [['a', 1], ['l', 1],['e', 1], ['x', 1]] 的形式,

    这两个字符串的键值都是 'alex',同时 [2,1,2,1] 也分别大于 [1,1,1,1]((2 >= 1, 1 >= 1, 2 >= 1, 1 >= 1))。

    var isLongPressedName = function (name, typed) {
      let nameArr = [], typedArr = [], tmp = [], len = 1;
      for (let i = 0; i < name.length; i++) { // nameArr 将name字符串分组
        if (name[i] === name[i + 1] && i < name.length - 1) {
          len++;
          continue;
        }
        tmp = [name[i], len];
        len = 1; // 如果下一项与这一项不相等 将tmp放入到数组中 len重置为1
        nameArr.push(tmp);
      }
    
      for (let i = 0; i < typed.length; i++) { // typedArr 将name字符串分组
        if (typed[i] === typed[i + 1] && i < typed.length - 1) {
          len++;
          continue;
        }
        tmp = [typed[i], len];
        len = 1;
        typedArr.push(tmp);
      }
      if (nameArr.length !== typedArr.length) return false; // 如果两个分块数组长度不一样 肯定是不对的
    
      // 判断每一项的第0项是否相等 第1项是否是typedarr 大于等于 namearr
      for (let i = 0; i < nameArr.length; i++) {
        if (!(nameArr[i][0] === typedArr[i][0] && nameArr[i][1] <= typedArr[i][1])) return false;
      }
      return true;
    };
  • 相关阅读:
    Docker安装nexus
    docker常用操作备忘
    react-01
    SBT实操指南
    Play中JSON序列化
    SPARK安装一:Windows下VirtualBox安装CentOS
    SPARK安装三:SPARK集群部署
    SPARK安装二:HADOOP集群部署
    SLICK基础
    函数式编程
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/12761373.html
Copyright © 2011-2022 走看看