最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 類型的不同位上,這樣,就做到了每個單詞都對應一個 int 類型的數(shù)值,這樣的話,我們對比兩個單詞是否包含相同的字母,只需要把它們對應的 int 數(shù)值做 & 運算,看是不是等于 0 即可,如果等于 0 ,說明沒有相同的位是 1,也就不存在相同的字母。

這樣,我們在比較兩個單詞是否沒有公共字母的時候只要直接按位與一下即可,沒有公共字母應該得到的值是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ù)組長度

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

空間復雜度: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ù)組長度

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

空間復雜度:o(n)

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

相關文章

  • Golang之模糊測試工具的使用

    Golang之模糊測試工具的使用

    本文主要介紹了Golang之模糊測試工具的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 一文徹底理解Golang閉包實現(xiàn)原理

    一文徹底理解Golang閉包實現(xiàn)原理

    閉包對于一個長期寫Java的開發(fā)者來說估計鮮有耳聞,光這名字感覺就有點"神秘莫測"。這篇文章的主要目的就是從編譯器的角度來分析閉包,徹底搞懂閉包的實現(xiàn)原理,需要的可以參考一下
    2022-10-10
  • Golang中拼接字符串的6種方式性能對比

    Golang中拼接字符串的6種方式性能對比

    golang的string類型是不可修改的,對于拼接字符串來說,本質(zhì)上還是創(chuàng)建一個新的對象將數(shù)據(jù)放進去,主要有6種拼接方式,下面小編就來為大家詳細講講吧
    2025-03-03
  • Go語言實現(xiàn)釘釘發(fā)送通知

    Go語言實現(xiàn)釘釘發(fā)送通知

    本文通過代碼給大家介紹了Go語言實現(xiàn)釘釘發(fā)送通知,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Go結(jié)構(gòu)體從基礎到應用深度探索

    Go結(jié)構(gòu)體從基礎到應用深度探索

    本文深入探討了結(jié)構(gòu)體的定義、類型、字面量表示和使用方法,旨在為讀者呈現(xiàn)Go結(jié)構(gòu)體的全面視角,通過結(jié)構(gòu)體,開發(fā)者可以實現(xiàn)更加模塊化、高效的代碼設計,這篇文章旨在為您提供關于結(jié)構(gòu)體的深入理解,助您更好地利用Go語言的強大功能
    2023-10-10
  • Go中的gRPC入門教程詳解

    Go中的gRPC入門教程詳解

    本文詳細講解了Go中的gRPC入門教程,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)

    Go語言開發(fā)區(qū)塊鏈只需180行代碼(推薦)

    這篇文章主要介紹了Go語言開發(fā)區(qū)塊鏈只需180行代碼,文章中將不會涉及工作量證明算法(PoW)以及權益證明算法(PoS)這類的共識算法。需要的朋友可以參考下
    2018-05-05
  • Go高級特性探究之處理1分鐘百萬請求詳解

    Go高級特性探究之處理1分鐘百萬請求詳解

    對于大型的互聯(lián)網(wǎng)應用程序,如電商平臺、社交網(wǎng)絡、金融交易平臺等,每秒鐘都會收到大量的請求,那么Go是如何處理這些百萬請求的呢,下面就來和大家詳細講講
    2023-06-06
  • Go語言結(jié)構(gòu)體Go range的學習教程

    Go語言結(jié)構(gòu)體Go range的學習教程

    這篇文章主要為大家介紹了Go語言結(jié)構(gòu)體Go range的學習教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Golang動態(tài)數(shù)組的實現(xiàn)示例

    Golang動態(tài)數(shù)組的實現(xiàn)示例

    動態(tài)數(shù)組能自動調(diào)整大小,與靜態(tài)數(shù)組不同,其大小不固定,可根據(jù)需求變化,實現(xiàn)通常依賴于數(shù)據(jù)結(jié)構(gòu)如鏈表或數(shù)組加額外信息,本文就來介紹一下Golang動態(tài)數(shù)組的實現(xiàn)示例,感興趣的可以了解一下
    2024-10-10

最新評論

彰化市| 察雅县| 永新县| 广灵县| 大洼县| 清水河县| 舒城县| 仁布县| 关岭| 侯马市| 密云县| 温泉县| 元谋县| 丹寨县| 清涧县| 福海县| 崇信县| 宾阳县| 钟山县| 怀远县| 武清区| 罗山县| 东丽区| 罗定市| 岫岩| 肇庆市| 开鲁县| 汝州市| 哈巴河县| 陈巴尔虎旗| 石嘴山市| 茶陵县| 寻乌县| 海口市| 陕西省| 孟村| 洞头县| 禄丰县| 镇宁| 曲沃县| 长海县|