type pair struct { _1 int _2 int } func maxProduct(words []string) (product int) { n := len(words) if n <= 1 { return } pairs := make([]pair, n) for i := 0; i < n; i++ { mask, l := 0, len(words[i]) for j := 0; j < l; j++ { mask |= 1 << uint(words[i][j]-'a') } pairs[i] = pair{mask, l} } for i := 0; i < n-1; i++ { for j := i + 1; j < n; j++ { if pairs[i]._1&pairs[j]._1 == 0 && product < pairs[i]._2*pairs[j]._2 { product = pairs[i]._2 * pairs[j]._2 } } } return }