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

About

今天是刷LeetCode的第五天轮洋,不敢稱之為挑戰(zhàn)了,因?yàn)榘l(fā)現(xiàn)自己還是太弱小抬旺,很久不寫代碼腦子都銹了弊予,每次做出的題解在性能上都和大神有很大的差距,但是為了提高我的代碼質(zhì)量开财,我必須堅(jiān)持下去汉柒!

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

題目描述

給定一個字符串误褪,請你找出其中不含有重復(fù)字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因?yàn)闊o重復(fù)字符的最長子串是 "abc"碾褂,所以其長度為 3兽间。

示例 2:

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

示例 3:

輸入: "pwwkew"
輸出: 3

解題思路

  1. 創(chuàng)建一個空列表嘀略,遍歷字符串,將字符串的元素append to列表
  2. 如果發(fā)現(xiàn)新追加的元素已經(jīng)存在列表中传货,先判斷此時(shí)的列表長度是否是歷史最長屎鳍,如果是就記錄下來
  3. 找到該元素在列表中的第一個index,然后把列表從返回的索引處切片问裕,取后半部分
  4. 判斷如果此時(shí)記錄的長度已經(jīng)大于列表切片后半部分的長度與字符串剩下的長度之和,那么就不需要再往下遍歷了孵坚,直接返回長度
  5. 如果for循環(huán)正常結(jié)束粮宛,則需要判斷此時(shí)的列表長度是否是最長,如果是就返回此時(shí)列表的長度卖宠,否則返回歷史最長

代碼如下(python3)

#-*- coding:utf-8 -*-
#Author: Bing Xu

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        len_result = 0
        temp = []
        for index in range(len(s)):
            temp.append(s[index])
            if temp.count(s[index]) > 1:
                if len(temp) - 1 >= len_result:
                    len_result = len(temp) - 1
                temp = temp[temp.index(s[index])+1:]
                if len_result >= len(s) - index - 1 + len(temp):
                    return len_result
        if len(temp) >= len_result:
            len_result = len(temp)
        return len_result

優(yōu)秀題解

思路

這道題主要用到思路是:滑動窗口

  • 什么是滑動窗口巍杈?

其實(shí)就是一個隊(duì)列,比如例題中的 abcabcbb,進(jìn)入這個隊(duì)列(窗口)為 abc 滿足題目要求扛伍,當(dāng)再進(jìn)入 a筷畦,隊(duì)列變成了 abca,這時(shí)候不滿足要求刺洒。所以鳖宾,我們要移動這個隊(duì)列!

  • 如何移動逆航?

我們只要把隊(duì)列的左邊的元素移出就行了鼎文,直到滿足題目要求!一直維持這樣的隊(duì)列因俐,找出隊(duì)列出現(xiàn)最長的長度時(shí)候拇惋,求出解!

時(shí)間復(fù)雜度:O(n)

作者:powcai
鏈接:https://leetcode-cn.com/problems/two-sum/solution/hua-dong-chuang-kou-by-powcai/

代碼如下

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if not s:return 0
        left = 0
        lookup = set()
        n = len(s)
        max_len = 0
        cur_len = 0
        for i in range(n):
            cur_len += 1
            while s[i] in lookup:
                lookup.remove(s[left])
                left += 1
                cur_len -= 1
            if cur_len > max_len:max_len = cur_len
            lookup.add(s[i])
        return max_len

與優(yōu)秀題解的差別

  1. 我采用的是列表抹剩,優(yōu)秀題解選擇的是集合撑帖,在集合中查找的效率要遠(yuǎn)高于列表
  2. 優(yōu)秀題解采用雙指針的思想,而我是通過對列表切片完成類似操作澳眷,消耗了很多的內(nèi)存胡嘿。

轉(zhuǎn)載請注明來源

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)境蔼,非商業(yè)轉(zhuǎn)載請注明出處灶平。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伺通,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逢享,更是在濱河造成了極大的恐慌罐监,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞒爬,死亡現(xiàn)場離奇詭異弓柱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)侧但,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門矢空,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人禀横,你說我怎么就攤上這事屁药。” “怎么了柏锄?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵酿箭,是天一觀的道長。 經(jīng)常有香客問我趾娃,道長缭嫡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任抬闷,我火速辦了婚禮妇蛀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笤成。我一直安慰自己评架,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布疹启。 她就那樣靜靜地躺著古程,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喊崖。 梳的紋絲不亂的頭發(fā)上挣磨,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機(jī)與錄音荤懂,去河邊找鬼茁裙。 笑死,一個胖子當(dāng)著我的面吹牛节仿,可吹牛的內(nèi)容都是我干的晤锥。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矾瘾!你這毒婦竟也來了女轿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤壕翩,失蹤者是張志新(化名)和其女友劉穎蛉迹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體放妈,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡北救,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芜抒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珍策。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宅倒,靈堂內(nèi)的尸體忽然破棺而出攘宙,到底是詐尸還是另有隱情,我是刑警寧澤拐迁,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布模聋,位于F島的核電站,受9級特大地震影響唠亚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜持痰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一灶搜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧工窍,春花似錦割卖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淹仑,卻和暖如春丙挽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匀借。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工颜阐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吓肋。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓凳怨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肤舞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349