欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go Java算法最大單詞長度乘積示例詳解

 更新時間:2022年08月22日 15:41:46   作者:黃丫丫  
這篇文章主要為大家介紹了Go Java算法最大單詞長度乘積示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

最大單詞長度乘積

給你一個字符串數(shù)組 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且這兩個單詞不含有公共字母。如果不存在這樣的兩個單詞,返回 0 。

*示例 1:

輸入:words = ["abcw","baz","foo","bar","xtfn","abcdef"]

輸出:16

解釋:這兩個單詞為 "abcw", "xtfn"。

  • 示例 2:

輸入:words = ["a","ab","abc","d","cd","bcd","abcd"]

輸出:4

解釋:這兩個單詞為 "ab", "cd"。

  • 示例 3:

輸入:words = ["a","aa","aaa","aaaa"]

輸出:0

解釋:不存在這樣的兩個單詞。

方法一:位運算(java)

為了得到最大單詞長度乘積,樸素的做法是,遍歷字符串數(shù)組 words 中的每一對單詞,判斷這一對單詞是否有公共字母,如果沒有公共字母,則用這一對單詞的長度乘積更新最大單詞長度乘積。

題目約定了每個單詞僅包含小寫字母,所以,我們可以將單詞中的每個字母都映射到一個 int 類型的不同位上,這樣,就做到了每個單詞都對應(yīng)一個 int 類型的數(shù)值,這樣的話,我們對比兩個單詞是否包含相同的字母,只需要把它們對應(yīng)的 int 數(shù)值做 & 運算,看是不是等于 0 即可,如果等于 0 ,說明沒有相同的位是 1,也就不存在相同的字母。

這樣,我們在比較兩個單詞是否沒有公共字母的時候只要直接按位與一下即可,沒有公共字母應(yīng)該得到的值是0,其他情況得到的值都不為零。

class Solution {
    public int maxProduct(String[] words) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int length = words.length;
        for (int i = 0; i < length; i++) {
            int mask = 0;
            String word = words[i];
            int wordLength = word.length();
            for (int j = 0; j < wordLength; j++) {
                mask |= 1 << (word.charAt(j) - 'a');
            }
            if (wordLength > map.getOrDefault(mask, 0)) {
                map.put(mask, wordLength);
            }
        }
        int maxProd = 0;
        Set<Integer> maskSet = map.keySet();
        for (int mask1 : maskSet) {
            int wordLength1 = map.get(mask1);
            for (int mask2 : maskSet) {
                if ((mask1 & mask2) == 0) {
                    int wordLength2 = map.get(mask2);
                    maxProd = Math.max(maxProd, wordLength1 * wordLength2);
                }
            }
        }
        return maxProd;
    }
}

l:數(shù)組中所有單詞的長度之和

n:數(shù)組長度

時間復(fù)雜度:o(l+n^2)

空間復(fù)雜度:o(n)

方法一:位運算(go)

具體的方法思路已經(jīng)在上文中表述,詳情請看上文內(nèi)容

func maxProduct(words []string) int {
    hash := func(word string) int {
        res := 0
        for _, r := range word{
            res |= 1 << (r - 'a')
        }
        return res
    }
    m, ans := map[int]int{}, 0
    for _, word := range words {
        h := hash(word)
        if m[h] < len(word) {
            for other, v := range m {
                if((other & h) == 0){
                    if tmp := v * len(word); tmp > ans {
                        ans = tmp
                    }
                }
            }
            m[h] = len(word)
        }
    }
    return ans
}

l:數(shù)組中所有單詞的長度之和

n:數(shù)組長度

時間復(fù)雜度:o(l+n^2)

空間復(fù)雜度:o(n)

以上就是Go Java算法最大單詞長度乘積示例詳解的詳細內(nèi)容,更多關(guān)于Go Java算法單詞長度乘積的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫

    golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫

    這篇文章主要為大家介紹了golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • GO語言實現(xiàn)的端口掃描器分享

    GO語言實現(xiàn)的端口掃描器分享

    這篇文章主要介紹了GO語言實現(xiàn)的端口掃描器分享,本文直接給出實現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
    2014-10-10
  • golang模擬實現(xiàn)帶超時的信號量示例代碼

    golang模擬實現(xiàn)帶超時的信號量示例代碼

    這篇文章主要給大家介紹了關(guān)于golang模擬實現(xiàn)帶超時的信號量的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 深度解密Go語言中字符串的使用

    深度解密Go語言中字符串的使用

    在編程語言中,字符串發(fā)揮著重要的角色。這篇文章就來帶大家一起深度解密Go語言中的字符串,文中的示例代碼講解詳細,需要的可以參考一下
    2022-09-09
  • golang中定時器cpu使用率高的現(xiàn)象詳析

    golang中定時器cpu使用率高的現(xiàn)象詳析

    這篇文章主要給大家介紹了關(guān)于golang中定時器cpu使用率高的現(xiàn)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 詳解go-zero如何實現(xiàn)計數(shù)器限流

    詳解go-zero如何實現(xiàn)計數(shù)器限流

    這篇文章主要來和大家說說限流,主要包括計數(shù)器限流算法以及具體的代碼實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • golang簡易令牌桶算法實現(xiàn)代碼

    golang簡易令牌桶算法實現(xiàn)代碼

    這篇文章主要介紹了golang簡易令牌桶算法實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Golang中fasthttp的使用詳解

    Golang中fasthttp的使用詳解

    fasthttp?是一個使用?Go?語言開發(fā)的?HTTP?包,主打高性能,針對?HTTP?請求響應(yīng)流程中的?hot?path?代碼進行了優(yōu)化,下面我們就來看看它的具體使用吧
    2024-03-03
  • Go語言Web編程實現(xiàn)Get和Post請求發(fā)送與解析的方法詳解

    Go語言Web編程實現(xiàn)Get和Post請求發(fā)送與解析的方法詳解

    這篇文章主要介紹了Go語言Web編程實現(xiàn)Get和Post請求發(fā)送與解析的方法,結(jié)合實例形式分析了Go語言客戶端、服務(wù)器端結(jié)合實現(xiàn)web數(shù)據(jù)get、post發(fā)送與接收數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • 淺談golang的json.Unmarshal的坑

    淺談golang的json.Unmarshal的坑

    本文主要介紹了淺談golang的json.Unmarshal的坑,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論