leetcode刷題筆記318題 最大單詞長度乘積
阿新 • • 發佈:2020-12-08
leetcode刷題筆記318題 最大單詞長度乘積
源地址:318. 最大單詞長度乘積
問題描述:
給定一個字串陣列 words,找到 length(word[i]) * length(word[j]) 的最大值,並且這兩個單詞不含有公共字母。你可以認為每個單詞只包含小寫字母。如果不存在這樣的兩個單詞,返回 0。
示例 1:
輸入: ["abcw","baz","foo","bar","xtfn","abcdef"]
輸出: 16
解釋: 這兩個單詞為 "abcw", "xtfn"。
示例 2:輸入: ["a","ab","abc","d","cd","bcd","abcd"]
輸出: 4
解釋: 這兩個單詞為 "ab", "cd"。
示例 3:輸入: ["a","aa","aaa","aaaa"]
輸出: 0
解釋: 不存在這樣的兩個單詞。
//核心問題: 判斷兩個單詞之間的是否存在重複字母 //核心思想: 使用一個32位數的每位的01情況標註當前字母是否出現 //構建陣列strArr儲存每個單詞的字母情況 //當i對應的字母情況與j對應的字母情況取與不為0 則存在重複字母 object Solution { def maxProduct(words: Array[String]): Int = { val strArr = Array.fill(words.length)(0) for (i <- 0 to words.length-1) { var temp = 0 var word = words(i) for (char <- word){ temp |= (1 << (char - 'a')) } strArr(i) = temp } var res = 0 for (i <- 0 to words.length-1) { for (j <- i+1 to words.length-1) { if ((strArr(i) & strArr(j)) == 0){ res = math.max(res, words(i).length * words(j).length) } } } return res } }
func maxProduct(words []string) int { arrStr := make([]int, len(words)) for i, word := range words { temp := 0 for _, strChar := range word { temp |= (1 << (strChar - 'a')) } arrStr[i] = temp } res := 0 for i := 0; i < len(words); i++ { for j := i+1; j < len(words); j++{ if arrStr[i] & arrStr[j] == 0{ res = max(res, len(words[i]) * len(words[j])) } } } return res } func max(a, b int) int { if a > b { return a } else { return b } }