列表

详情


925. 长按键入

你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。

你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True

 

示例 1:

输入:name = "alex", typed = "aaleex"
输出:true
解释:'alex' 中的 'a' 和 'e' 被长按。

示例 2:

输入:name = "saeed", typed = "ssaaedd"
输出:false
解释:'e' 一定需要被键入两次,但在 typed 的输出中不是这样。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool isLongPressedName(string name, string typed) { } };

python3 解法, 执行用时: 56 ms, 内存消耗: 15.8 MB, 提交时间: 2023-09-27 14:56:18

class Solution:
    def isLongPressedName(self, name: str, typed: str) -> bool:
        i,j = 0,0
        while j<len(typed):
            if i < len(name) and name[i] == typed[j]:
                i += 1
                j += 1
            elif j > 0 and typed[j] == typed[j-1]:
                j += 1
            else:
                return False
        
        return i == len(name)

java 解法, 执行用时: 1 ms, 内存消耗: 39.4 MB, 提交时间: 2023-09-27 14:55:47

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        int i = 0, j = 0;
        while (j < typed.length()) {
            if (i < name.length() && name.charAt(i) == typed.charAt(j)) {
                i++;
                j++;
            } else if (j > 0 && typed.charAt(j) == typed.charAt(j - 1)) {
                j++;
            } else {
                return false;
            }
        }
        return i == name.length();
    }
}

cpp 解法, 执行用时: 0 ms, 内存消耗: 6.5 MB, 提交时间: 2023-09-27 14:55:33

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int i = 0, j = 0;
        while (j < typed.length()) {
            if (i < name.length() && name[i] == typed[j]) {
                i++;
                j++;
            } else if (j > 0 && typed[j] == typed[j - 1]) {
                j++;
            } else {
                return false;
            }
        }
        return i == name.length();
    }
};

javascript 解法, 执行用时: 76 ms, 内存消耗: 41.1 MB, 提交时间: 2023-09-27 14:55:08

/**
 * @param {string} name
 * @param {string} typed
 * @return {boolean}
 */
const isLongPressedName = (name, typed) => {
  let i = 0;
  for (let j = 0; j < typed.length; j++) {
    if (i < name.length && name[i] == typed[j]) { // i 和 j 都步进1
      i++;
    } else if (i - 1 >= 0 && typed[j] == name[i - 1]) { // i - 1 >= 0代表name[i - 1]存在
      // 当前typed[j]是长按出来的,它右边可能还有长按出来的,只是j++
    } else { // name[i - 1]不存在,或 typed[j] != name[i - 1],键入错误,直接返回false
      return false;
    }
  }
  if (i > name.length - 1) { // 遍历结束,如果i越界了,说明i的字符也考察完了,返回true
    return true;
  }
  return false; // i 没越界,说明还有别的字符未匹配,返回false
};

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2021-06-21 17:14:44

func isLongPressedName(name string, typed string) bool {
	i, j := 0, 0
	for j < len(typed) {
		if i < len(name) && name[i] == typed[j] {
			i++
			j++
		} else if j > 0 && typed[j] == typed[j-1] {
			j++
		} else {
			return false
		}
	}
	return i == len(name)
}

上一题