Drill

ProblemsGo › patterns

Cancel out the doubled keystrokes

mediumpatternsStacksStringsGo

A faulty keyboard doubles a letter now and then. The cleaner removes any two identical letters sitting next to each other, and keeps going while that leaves a new pair behind.

collapseDoubles(typed: string) → string

Go needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.

Solve it in Python →

Where you start

func collapseDoubles(typed string) string {
	
}

Worked examples

CallResult
collapseDoubles("abbaca")"ca"
collapseDoubles("azxxzy")"ay"
collapseDoubles("abc")"abc"
collapseDoubles("aa")""

Hint

Build the result on a stack. For each character, either it cancels the one on top or it goes on top — no rescanning needed.

Reference solution in Go
func collapseDoubles(typed string) string {
	kept := []rune{}
	for _, ch := range typed {
	    if len(kept) > 0 && kept[len(kept)-1] == ch {
	        kept = kept[:len(kept)-1]
	    } else {
	        kept = append(kept, ch)
	    }
	}
	return string(kept)
}

The same problem in another language

More patterns problems in Go