3. Longest Substring Without Repeating Characters 無重復字符的最長子串

題目鏈接
tag:

  • Medium;

question:
??Given a string, find the length of the longest substring without repeating characters.

Example 1:

Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.

Example 2:

Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

思路:
??給了一個字符串旺罢,讓求最長的無重復字符的子串壳坪,注意這里是子串读整,不是子序列宾舅,所以必須是連續(xù)的在验。我們先不考慮代碼怎么實現(xiàn),拿Example1中的例子"abcabcbb"绩社,該怎么找摔蓝。博主會一個字符一個字符的遍歷,比如a愉耙,b项鬼,c,然后又出現(xiàn)了一個a劲阎,那么此時就應該去掉第一次出現(xiàn)的a,然后繼續(xù)往后鸠真,又出現(xiàn)了一個b悯仙,則應該去掉一次出現(xiàn)的b龄毡,以此類推,最終發(fā)現(xiàn)最長的長度為3锡垄。所以說沦零,我們需要記錄之前出現(xiàn)過的字符,記錄的方式有很多货岭,最常見的是統(tǒng)計字符出現(xiàn)的個數(shù)路操,但是這道題字符出現(xiàn)的位置很重要,所以我們可以使用HashMap來建立字符和其出現(xiàn)位置之間的映射千贯。進一步考慮屯仗,由于字符會重復出現(xiàn),到底是保存所有出現(xiàn)的位置呢搔谴,還是只記錄一個位置魁袜?我們之前手動推導的方法實際上是維護了一個滑動窗口,窗口內(nèi)的都是沒有重復的字符敦第,我們需要盡可能的擴大窗口的大小峰弹。由于窗口在不停向右滑動,所以我們只關心每個字符最后出現(xiàn)的位置芜果,并建立映射鞠呈。窗口的右邊界就是當前遍歷到的字符的位置,為了求出窗口的大小右钾,我們需要一個變量left來指向滑動窗口的左邊界蚁吝,這樣那么就分兩種情況,在或不在滑動窗口內(nèi)霹粥,如果不在滑動窗口內(nèi)灭将,那么就沒事,當前字符可以加進來后控,如果在的話庙曙,就需要先在滑動窗口內(nèi)去掉這個已經(jīng)出現(xiàn)過的字符了,去掉的方法并不需要將左邊界left一位一位向右遍歷查找浩淘,由于我們的HashMap已經(jīng)保存了該重復字符最后出現(xiàn)的位置捌朴,所以直接移動left指針就可以了。我們維護一個結(jié)果res张抄,每次用出現(xiàn)過的窗口大小來更新結(jié)果res砂蔽,就可以得到最終結(jié)果啦。AC代碼如下:

C++ 解法:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if (s.size() < 2)
            return s.size();
        unordered_map<char, int> m;
        int max_len = 0, left = -1;
        for (int i=0; i<s.size(); ++i) {
            if (m.count(s[i]) && m[s[i]] > left)
                left = m[s[i]];
            m[s[i]] = i;
            max_len = max(max_len, i-left);
        }
        return max_len;
    }
};

Python 解法:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s) < 2:
            return len(s)
        d = {}
        left = -1
        max_len = 0
        for i in range(len(s)):
            if s[i] in d and d[s[i]] > left:
                left = d[s[i]]
            d[s[i]] = i
            max_len = max(max_len, i-left)
        return max_len
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末署惯,一起剝皮案震驚了整個濱河市左驾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖诡右,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件安岂,死亡現(xiàn)場離奇詭異,居然都是意外死亡帆吻,警方通過查閱死者的電腦和手機域那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猜煮,“玉大人次员,你說我怎么就攤上這事⊥醮” “怎么了淑蔚?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辫秧。 經(jīng)常有香客問我束倍,道長,這世上最難降的妖魔是什么盟戏? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任绪妹,我火速辦了婚禮,結(jié)果婚禮上柿究,老公的妹妹穿的比我還像新娘邮旷。我一直安慰自己,他們只是感情好蝇摸,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布婶肩。 她就那樣靜靜地躺著,像睡著了一般貌夕。 火紅的嫁衣襯著肌膚如雪律歼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天啡专,我揣著相機與錄音险毁,去河邊找鬼。 笑死们童,一個胖子當著我的面吹牛畔况,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慧库,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跷跪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了齐板?” 一聲冷哼從身側(cè)響起吵瞻,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葛菇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后橡羞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熟呛,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年尉姨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吗冤。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡又厉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椎瘟,到底是詐尸還是另有隱情覆致,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布肺蔚,位于F島的核電站煌妈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宣羊。R本人自食惡果不足惜璧诵,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仇冯。 院中可真熱鬧之宿,春花似錦、人聲如沸苛坚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泼舱。三九已至等缀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娇昙,已是汗流浹背尺迂。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涯贞,地道東北人枪狂。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像宋渔,于是被迫代替她去往敵國和親州疾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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