funccompare(a *string, b *string)int { var i, j = 0, 0 for i < len(*a) && j < len(*b) { if (*a)[i] != (*b)[j] { returnint((*a)[i]) - int((*b)[i]) } i++ j++ } if j >= len(*b) && i >= len(*a) { return0 } elseif j >= len(*b) { return1 } else { return-1 } }
funcabs(x int)int { if x < 0 { return -x } return x }
funclexicographicallySmallestString(s string)string { var hash = make(map[string]bool) var ret = s var dfs func(*string, int) dfs = func(str *string, i int) { if i >= len(*str) { return } if i > 0 { x := abs(int((*str)[i]) - int((*str)[i-1])) if x == 1 || x == 25 { ns := (*str)[:i-1] + (*str)[i+1:] if !hash[ns] { hash[ns] = true if compare(&ns, &ret) < 0 { ret = ns } dfs(&ns, i-1) } } } dfs(str, i+1) } dfs(&s, 0) return ret }