09 Sept 2026Go / Python / TypeScriptEasy

Long Pressed Name

Check whether a typed string could result from long-pressing characters of a name.

Compare corresponding character runs and require each typed run to be at least as long as the matching name run.

complexity

O(n + m) time and O(1) space.

solution files

  • Go long-pressed-name/solution.go
  • Python long-pressed-name/solution.py
  • TypeScript long-pressed-name/solution.ts

Solution files

Golong-pressed-name/solution.go
package main

func isLongPressedName(name string, typed string) bool {
	i, j := 0, 0
	for i < len(name) && j < len(typed) {
		if name[i] != typed[j] {
			return false
		}
		character := name[i]
		nameCount, typedCount := 0, 0
		for i < len(name) && name[i] == character {
			i++
			nameCount++
		}
		for j < len(typed) && typed[j] == character {
			j++
			typedCount++
		}
		if typedCount < nameCount {
			return false
		}
	}
	return i == len(name) && j == len(typed)
}
Pythonlong-pressed-name/solution.py
class Solution:
    def isLongPressedName(self, name: str, typed: str) -> bool:
        i = j = class="syntax-number">0
        while i < len(name) and j < len(typed):
            if name[i] != typed[j]: return False
            character = name[i]
            name_count = typed_count = class="syntax-number">0
            while i < len(name) and name[i] == character: i, name_count = i + class="syntax-number">1, name_count + class="syntax-number">1
            while j < len(typed) and typed[j] == character: j, typed_count = j + class="syntax-number">1, typed_count + class="syntax-number">1
            if typed_count < name_count: return False
        return i == len(name) and j == len(typed)
TypeScriptlong-pressed-name/solution.ts
function isLongPressedName(name: string, typed: string): boolean {
  let i = class="syntax-number">0;
  let j = class="syntax-number">0;
  while (i < name.length && j < typed.length) {
    if (name[i] !== typed[j]) return false;
    const character = name[i]; let nameCount = class="syntax-number">0; let typedCount = class="syntax-number">0;
    while (i < name.length && name[i] === character) { i += class="syntax-number">1; nameCount += class="syntax-number">1; }
    while (j < typed.length && typed[j] === character) { j += class="syntax-number">1; typedCount += class="syntax-number">1; }
    if (typedCount < nameCount) return false;
  }
  return i === name.length && j === typed.length;
}