溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang中怎么利用leetcode 實(shí)現(xiàn)一個(gè)無(wú)重復(fù)字符的最長(zhǎng)子串

發(fā)布時(shí)間:2021-07-06 15:15:11 來(lái)源:億速云 閱讀:221 作者:Leah 欄目:大數(shù)據(jù)

這篇文章給大家介紹golang中怎么利用leetcode 實(shí)現(xiàn)一個(gè)無(wú)重復(fù)字符的最長(zhǎng)子串,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

給定一個(gè)字符串,請(qǐng)你找出其中不含有重復(fù)字符的 最長(zhǎng)子串 的長(zhǎng)度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 長(zhǎng)度為 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 ,所以其長(zhǎng)度為 1。

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 ,所以其長(zhǎng)度為 3。
     請(qǐng)注意,你的答案必須是 子串 的長(zhǎng)度, 是一個(gè)不是子串。

解題思路:

1,這是一個(gè)滑動(dòng)窗口題目,需要移動(dòng)左右指針

2,判斷字符是否重復(fù)的題目,一般都用hashmap,用空間換時(shí)間

3,由于hashmap只需要表示字符存在不存在,可以用來(lái)存這個(gè)字符在串中的位置(從1開(kāi)始),這是一個(gè)小技巧

4,如果字符沒(méi)有出現(xiàn)過(guò)則右指針右移,長(zhǎng)度增加

5,如果出現(xiàn)過(guò),

A,如果出現(xiàn)的位置在左指針之前,記錄當(dāng)前位置到左指針的長(zhǎng)度,并和最大長(zhǎng)度比較(即左指針不移)

B,如果出現(xiàn)的位置在左指針之后,顯然比當(dāng)前長(zhǎng)度短,就不用比較了,(即左指針移到上一次出現(xiàn)的位置的下一個(gè)地方)

6,更新hashmap中字符出現(xiàn)的位置為這一次最新出現(xiàn)的位置

寫(xiě)法1:

func lengthOfLongestSubstring(s string) int {    m:=make(map[byte]int)     res:=0    left:=0    for i:=0;i < len(s);i++{       if m[s[i]] >0 && left< m[s[i]]{            left= m[s[i]]                   }         m[s[i]] = i + 1             if i-left+1>res{              res=i-left+1           } }return res}

寫(xiě)法2:

func lengthOfLongestSubstring(s string) int {    m:=make(map[byte]int)     res:=0    left:=0    for i:=0;i < len(s);i++{        if m[[]byte(s)[i]] == 0 || m[[]byte(s)[i]] < left{             res = max(res, i - left + 1)         } else {            left = m[s[i]]         }      m[s[i]] = i + 1     }return res}
func max(a,b int)int{    if a>b{        return a    }    return b}

關(guān)于golang中怎么利用leetcode 實(shí)現(xiàn)一個(gè)無(wú)重復(fù)字符的最長(zhǎng)子串就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI