func listDifference(a []string, b []string) (res []string) {
	// This is slow, but more obviously correct than the fast algorithm.
	m := make(map[string]struct{})
	for _, s := range b {
		m[s] = struct{}{}
	}

	for _, s := range a {
		if _, ok := m[s]; !ok {
			res = append(res, s)
		}
	}

	return
}
// Given lists of strings A and B, return those values that are in A but not in
// B. If A contains duplicates of a value V not in B, the only guarantee is
// that V is returned at least once.
Given lists of strings A and B, return those values that are in A but not in
B. If A contains duplicates of a value V not in B, the only guarantee is
that V is returned at least once.
// Given lists of strings A and B return those values that are in A but not in // B . If A contains duplicates of a value V not in B the only guarantee is // that V is returned at least once .
func listDifference(a []string, b []string) (res []string) {
	m := make(map[string]struct{})
	for _, s := range b {
		m[s] = struct{}{}
	}
	for _, s := range a {
		if _, ok := m[s]; !ok {
			res = append(res, s)
		}
	}
	return
}
func listDifference ( a [ ] string , b [ ] string ) ( res [ ] string ) { m := make ( map [ string ] struct { } ) for _ , s := range b { m [ s ] = struct { } { } } for _ , s := range a { if _ , ok := m [ s ] ; ! ok { res = append ( res , s ) } } return }
Given lists of strings A and B, return those values that are in A but not in
B.
Given lists of strings A and B return those values that are in A but not in B .
// This is slow, but more obviously correct than the fast algorithm.