leetcode 無重復(fù)字符的最長子串問題的python解法

原題目

給定一個(gè)字符串乌叶,找出不含有重復(fù)字符的最長子串的長度。
示例:
給定 "abcabcbb" ,沒有重復(fù)字符的最長子串是 "abc" ,那么長度就是
給定 "bbbbb" 肩榕,最長的子串就是 "b" ,長度是1。
給定 "pwwkew" 株汉,最長子串是 "wke" 筐乳,長度是3。請注意答案必須是一個(gè)子串乔妈,"pwke" 是 子序列 而不是子串蝙云。

思路

leetcode 不但要求算法正確 而且對算法有速度要求,因此這里不討論暴力算法

    1. 用一個(gè)字典保存在遍歷時(shí)字符串中字符出現(xiàn)的最后位置
    1. 用快慢指針標(biāo)記不重復(fù)子串的開始和結(jié)束路召,開始搜索時(shí)勃刨,慢指針i=0,標(biāo)記子串開始股淡,快指針j標(biāo)記子串結(jié)束
    1. 移動(dòng)j時(shí)身隐,首先檢測當(dāng)前字符是否已經(jīng)在字典中存有索引,如有檢測到已經(jīng)保存有索引并且索引值大于等于子串的起始位置I 則表明移動(dòng)j時(shí)i和j之間出現(xiàn)了重復(fù)字符唯灵,此時(shí)對比子串長度贾铝,并保留大的子串長度。同時(shí)埠帕,將字串起始位置移動(dòng)到當(dāng)前字符上一次出現(xiàn)的位置之后
    1. 每次循環(huán)最后更新字典中當(dāng)前字符的索引值5 注意垢揩,循環(huán)結(jié)束后,j移出當(dāng)前字符串敛瓷,需要計(jì)算這最后一個(gè)不重復(fù)子串的長度
111.png

如上圖所示:當(dāng)檢測到第二個(gè)b的出現(xiàn)位置時(shí)水孩,第一個(gè)子串搜索結(jié)束,子串頭指針移動(dòng)到第一個(gè)b之后

代碼

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        i = 0
       
        maxlen = 1
        strslen = len(s)
        if strslen == 0:
            return 0
        j = i + 1
        dict1 = {}
        dict1[s[i]] = i
        index = -1
        while j < strslen:
            index = dict1.get(s[j],-1) #get this char's last found index, otherwise -1
            if index != -1 and index >= i:      #this char has been saved in dict and its index larger than i     
                maxlen = maxlen if maxlen > j -i else j-i #update maxlen
                i=index + 1 # move the start pointer i after the char's first occurence
            
            dict1[s[j]] = j #update char's latest index
            j += 1 # move j
        maxlen = maxlen if maxlen > j -i else j-i #after j move out of string, update maxlen again
        return maxlen
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琐驴,一起剝皮案震驚了整個(gè)濱河市俘种,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绝淡,老刑警劉巖宙刘,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牢酵,居然都是意外死亡悬包,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門馍乙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來布近,“玉大人,你說我怎么就攤上這事丝格〕徘疲” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵显蝌,是天一觀的道長预伺。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么酬诀? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任脏嚷,我火速辦了婚禮,結(jié)果婚禮上瞒御,老公的妹妹穿的比我還像新娘父叙。我一直安慰自己,他們只是感情好肴裙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布高每。 她就那樣靜靜地躺著,像睡著了一般践宴。 火紅的嫁衣襯著肌膚如雪鲸匿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天阻肩,我揣著相機(jī)與錄音带欢,去河邊找鬼。 笑死烤惊,一個(gè)胖子當(dāng)著我的面吹牛乔煞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柒室,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼渡贾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雄右?” 一聲冷哼從身側(cè)響起空骚,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擂仍,沒想到半個(gè)月后囤屹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逢渔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年肋坚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肃廓。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡智厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盲赊,到底是詐尸還是另有隱情铣鹏,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布角钩,位于F島的核電站吝沫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏递礼。R本人自食惡果不足惜惨险,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脊髓。 院中可真熱鬧辫愉,春花似錦、人聲如沸将硝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽依疼。三九已至痰腮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間律罢,已是汗流浹背膀值。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留误辑,地道東北人沧踏。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像巾钉,于是被迫代替她去往敵國和親翘狱。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345