Leetcode Note: Go - Backspace String Compare

Backspace String Compare - LeetCode
https://leetcode.com/problems/backspace-string-compare/

  • Go 言語で取り組んだメモ

所感

  • string s, t が与えられ、空のテキストエディターに入力したときに、それが等しい場合は true を return する
  • # はバックスペース文字を意味する

回答

Backspace String Compare - LeetCode
https://leetcode.com/problems/backspace-string-compare/solution/

[Go] Multiple Solutions - Clean Code (0ms 100%) O((m+n)/2) - LeetCode Discuss
https://leetcode.com/problems/backspace-string-compare/discuss/1787466/Go-Multiple-Solutions-Clean-Code-(0ms-100)-O((m%2Bn)2)

// Time: O(n+m)
// Space: O(1)
func backspaceCompare(s string, t string) bool {
	// Time: O(n)
	s = stringWithoutSpace(s)

	// Tim: O(m)
	t = stringWithoutSpace(t)

    return strings.EqualFold(stringWithoutSpace(s), stringWithoutSpace(t))
}

func stringWithoutSpace(s string) string {
    sb := new(strings.Builder)
	
	// O(len(s))
    for _, r := range s {
        if r != '#' {
            sb.WriteRune(r)
        } else {
            removeLastRune(sb)
        }
    }
    return sb.String()
}

func removeLastRune(sb *strings.Builder) {
    str := sb.String()
    if len(str) > 0 {
        str = str[:len(str)-1]
        sb.Reset()
        sb.WriteString(str)
    }
}