無重復(fù)字符的最長子串

圖示:針對于字符串“tmmuat”龙优,我們需要創(chuàng)建兩個索引值都是從0開始牺荠,再創(chuàng)建一個HashMap用來存放s[endIndex]:index鍵值對

image-20210401105649901.png

圖示:通過循環(huán)遍歷,不斷地把對應(yīng)的鍵值對放進HashMap中
image-20210401110306959.png

圖示:當(dāng)遇到HashMap中已經(jīng)存在的字符時怎爵,就要更新startIndex為map[m]+1悯森,說明遇到了重復(fù)的字符了,那么就要讓當(dāng)前窗口的左邊界向右邊挪一格巷怜;并且更新HashMap中的字符索引葛超;但是最長子串的長度不能因為窗口的變化而變小暴氏,它需要和以往的最大窗口大小比較
image-20210401110443249.png

圖示:繼續(xù)保持循環(huán)遍歷
image-20210401111151586.png

圖示:最長子串結(jié)果隨著遍歷的逐漸變長
image-20210401111305945.png

圖示:當(dāng)再次遍歷到一個重復(fù)的字符時,更新startIndex時绣张,需要比較當(dāng)前窗口左邊界比較大小答渔,左邊界肯定是不能往左邊走的,只能向右一往無前侥涵;同時需要更新最長子串結(jié)果沼撕。
image-20210401111719834.png

最后,以上邏輯全部轉(zhuǎn)換成代碼芜飘,如下:

goland語言

func lengthOfLongestSubstring(s string) int {
  // 窗口左邊界
    startIndex := 0
  // 存放【字符:索引值】鍵值對
    hashMap := make(map[byte]int)
  // 最長子串結(jié)果值
    result := 0
  // 循環(huán)遍歷
    for endIndex := 0; endIndex < len(s); endIndex++ {
    // 當(dāng)命中鍵值對中的字符時务豺,說明遇到重復(fù)字符了
        if index, ok := hashMap[s[endIndex]]; ok {
      // 那么就要更新窗口左邊界,左邊界不能向左移動嗦明,只能向右一往無前
            startIndex = max(startIndex, index+1)
        }
    // 更新字符的最新索引值
        hashMap[s[endIndex]] = endIndex
    // 更新當(dāng)前遇到的最長子串結(jié)果值
        result = max(result, endIndex-startIndex+1)
    }
  // 返回最終結(jié)果值
    return result
}

// 求最大值
func max(v1 int, v2 int) int {
    if v1 > v2 {
        return v1
    }
    return v2
}

java語言

public static int lengthOfLongestSubstring(String s) {
    // 定義窗口左邊界
    int startIndex = 0;
    // 存放【字符:索引值】鍵值對
    Map<Character, Integer> hashMap = new HashMap<>();
    // 最長子串結(jié)果值
    int result = 0;
    // 循環(huán)遍歷
    for (int endIndex = 0; endIndex < s.length(); endIndex++) {
        // 當(dāng)命中鍵值對中的字符時笼沥,說明遇到重復(fù)字符了
        Integer index = hashMap.get(s.charAt(endIndex));
        if (index != null) {
            // 那么就要更新窗口左邊界,左邊界不能向左移動娶牌,只能向右一往無前
            startIndex = Math.max(startIndex,index+1);
        }
        // 更新字符的最新索引值
        hashMap.put(s.charAt(endIndex),endIndex);
        // 更新當(dāng)前遇到的最長子串結(jié)果值
        result=Math.max(result,endIndex-startIndex+1);
    }
    // 返回最終結(jié)果值
    return result;
}

python代碼

def lengthOfLongestSubstring(self, s: str) -> int:
    # 定義窗口左邊界
    startIndex = 0
    # 存放【字符:索引值】鍵值對
    hashMap = {}
    # 最長子串結(jié)果值
    result = 0
    # 循環(huán)遍歷
    for endIndex in range(len(s)):
        # 當(dāng)命中鍵值對中的字符時奔浅,說明遇到重復(fù)字符了
        if s[endIndex] in hashMap.keys():
            # 那么就要更新窗口左邊界,左邊界不能向左移動诗良,只能向右一往無前
            startIndex = max(startIndex, hashMap[s[endIndex]] + 1)
        # 更新字符的最新索引值
        hashMap[s[endIndex]] = endIndex
        # 更新當(dāng)前遇到的最長子串結(jié)果值
        result = max(result, endIndex - startIndex + 1)
    # 返回最終結(jié)果值
    return result
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汹桦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鉴裹,更是在濱河造成了極大的恐慌舞骆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹罚,死亡現(xiàn)場離奇詭異葛作,居然都是意外死亡,警方通過查閱死者的電腦和手機猖凛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绪穆,“玉大人辨泳,你說我怎么就攤上這事【猎海” “怎么了菠红?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長难菌。 經(jīng)常有香客問我试溯,道長,這世上最難降的妖魔是什么郊酒? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任遇绞,我火速辦了婚禮键袱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摹闽。我一直安慰自己蹄咖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布付鹿。 她就那樣靜靜地躺著澜汤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舵匾。 梳的紋絲不亂的頭發(fā)上俊抵,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音坐梯,去河邊找鬼徽诲。 笑死,一個胖子當(dāng)著我的面吹牛烛缔,可吹牛的內(nèi)容都是我干的馏段。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼践瓷,長吁一口氣:“原來是場噩夢啊……” “哼院喜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晕翠,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤喷舀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淋肾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硫麻,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年樊卓,在試婚紗的時候發(fā)現(xiàn)自己被綠了拿愧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡碌尔,死狀恐怖浇辜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唾戚,我是刑警寧澤柳洋,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站叹坦,受9級特大地震影響熊镣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一绪囱、第九天 我趴在偏房一處隱蔽的房頂上張望测蹲。 院中可真熱鬧,春花似錦毕箍、人聲如沸弛房。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽文捶。三九已至,卻和暖如春媒咳,著一層夾襖步出監(jiān)牢的瞬間粹排,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工涩澡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顽耳,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓妙同,卻偏偏與公主長得像射富,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粥帚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容