非排序数组

struct{}cap=len(arr)j
O(n)O(n)
func removeDuplication_map(arr []string) []string {
    set := make(map[string]struct{}, len(arr))
    j := 0
    for _, v := range arr {
        _, ok := set[v]
        if ok {
            continue
        }
        set[v] = struct{}{}
        arr[j] = v
        j++
    }

    return arr[:j]
}

已排序数组

O(n)O(1)
func removeDuplication_sort(arr []string) []string {
    length := len(arr)
    if length == 0 {
        return arr
    }

    j := 0
    for i := 1; i < length; i++ {
        if arr[i] != arr[j] {
            j++
            if j < i {
                swap(arr, i, j)
            }
        }
    }

    return arr[:j+1]
}

func swap(arr []string, a, b int) {
   arr[a], arr[b] = arr[b], arr[a]
}

Reference