leetcode-3-Longest Substring Without Repeating Characters

3. Longest Substring Without Repeating Characters

題目:

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

Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", 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.

解法一

解析

用一個(gè)map記錄各個(gè)字符的下標(biāo)著角,首先將所有的下表初始化為-1,然后向后遍歷的過程中記錄當(dāng)前字符的下標(biāo)髓削,并將當(dāng)前字符的下標(biāo)與上一個(gè)相同字符的下標(biāo)做差值彬坏,即可得到它們之間無重復(fù)字符的子串连躏。然后用Max記錄更新最大子串?dāng)?shù),并更新map存儲的下標(biāo)值,即從這個(gè)重復(fù)值重新開始數(shù)字符串的數(shù)(最大無重復(fù)字符子串必定在兩個(gè)重復(fù)字符之間听隐,或者是整個(gè)字符串的長度)
這種方法好像被叫做滑動窗口法
"滑動窗口"
比方說 abcabccc 當(dāng)你右邊掃描到abca的時(shí)候你得把第一個(gè)a刪掉得到bca军拟,
然后"窗口"繼續(xù)向右滑動剃执,每當(dāng)加到一個(gè)新char的時(shí)候,左邊檢查有無重復(fù)的char懈息,
然后如果沒有重復(fù)的就正常添加肾档,
有重復(fù)的話就左邊扔掉一部分(從最左到重復(fù)char這段扔掉),在這個(gè)過程中記錄最大窗口長度

代碼(C++)

class Solution {  
public:  
    int lengthOfLongestSubstring(string s) {  
        map<char,int> book;  
        int i,Max=0,pre=-1;  
        for(i=0;i<s.length();i++)
        book[s[i]]=-1;  
        for(i=0;i<s.length();i++)  
        {  
            pre=max(pre,book[s[i]]);//更新map中各個(gè)字符的下標(biāo)  
            Max=max(Max,i-pre); //保存暫時(shí)的最大無重復(fù)子串長度  
            book[s[i]]=i; //計(jì)算差值后繼續(xù)更新  
        }  
        return Max;  
    }  
}; 

解法二

解析

建立一個(gè)256位大小的整型數(shù)組來代替哈希表辫继,這樣做的原因是ASCII表共能表示256個(gè)字符怒见,所以可以記錄所有字符,然后我們需要定義兩個(gè)變量res和left姑宽,其中res用來記錄最長無重復(fù)子串的長度遣耍,left指向該無重復(fù)子串左邊的起始位置,然后我們遍歷整個(gè)字符串低千,對于每一個(gè)遍歷到的字符配阵,如果哈希表中該字符串對應(yīng)的值為0,說明沒有遇到過該字符示血,則此時(shí)計(jì)算最長無重復(fù)子串棋傍,i - left +1,其中i是最長無重復(fù)子串最右邊的位置难审,left是最左邊的位置瘫拣,還有一種情況也需要計(jì)算最長無重復(fù)子串,就是當(dāng)哈希表中的值小于left告喊,這是由于此時(shí)出現(xiàn)過重復(fù)的字符麸拄,left的位置更新了派昧,如果又遇到了新的字符,就要重新計(jì)算最長無重復(fù)子串拢切。最后每次都要在哈希表中將當(dāng)前字符對應(yīng)的值賦值為i+1蒂萎。

代碼(C++)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int m[256] = {0}, res = 0, left = 0;
        for (int i = 0; i < s.size(); ++i) {
            if (m[s[i]] == 0 || m[s[i]] < left) {
                res = max(res, i - left + 1);
            } else {
                left = m[s[i]];
            }
            m[s[i]] = i + 1;
        }
        return res;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市淮椰,隨后出現(xiàn)的幾起案子五慈,更是在濱河造成了極大的恐慌,老刑警劉巖主穗,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泻拦,死亡現(xiàn)場離奇詭異,居然都是意外死亡忽媒,警方通過查閱死者的電腦和手機(jī)争拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晦雨,“玉大人架曹,你說我怎么就攤上這事〗鹕猓” “怎么了音瓷?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夹抗。 經(jīng)常有香客問我绳慎,道長,這世上最難降的妖魔是什么漠烧? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任杏愤,我火速辦了婚禮,結(jié)果婚禮上已脓,老公的妹妹穿的比我還像新娘珊楼。我一直安慰自己,他們只是感情好度液,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布厕宗。 她就那樣靜靜地躺著,像睡著了一般堕担。 火紅的嫁衣襯著肌膚如雪已慢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天霹购,我揣著相機(jī)與錄音佑惠,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膜楷,可吹牛的內(nèi)容都是我干的旭咽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼赌厅,長吁一口氣:“原來是場噩夢啊……” “哼穷绵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起察蹲,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤请垛,失蹤者是張志新(化名)和其女友劉穎催训,沒想到半個(gè)月后洽议,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漫拭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年亚兄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片采驻。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡审胚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出礼旅,到底是詐尸還是另有隱情膳叨,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布痘系,位于F島的核電站菲嘴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汰翠。R本人自食惡果不足惜龄坪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望复唤。 院中可真熱鬧健田,春花似錦、人聲如沸佛纫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呈宇。三九已至好爬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攒盈,已是汗流浹背抵拘。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留型豁,地道東北人僵蛛。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓尚蝌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親充尉。 傳聞我的和親對象是個(gè)殘疾皇子飘言,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

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