3. Longest Substring Without Repeating Characters

最長不重復子串

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

Examples:

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.

大致意思:給一個字符串俱恶,找到最長子串的長度涧郊,要求該子串不包含重復的字符。

常規(guī)解法:用哈希表來進行查找,這樣查找效率會高些捶箱。從字符串頭部開始計算子串,將沒有重復出現(xiàn)的字符存入哈希表中页响,如果遇到相同的字符闺魏,表明當前不重復子串已經結束,記錄此不重復子串的長度,并從哈希表中查到的該重復字符位置開始重新計算子串蜕径,比較確定此子串是否是當前最長的两踏,遍歷整個字符串后得到不重復字符的最長子串長度。

class Solution {
public:
   int lengthOfLongestSubstring(string s) {
       unordered_map<char, int> m;
       int maxLen = 0;
       int start = -1;
       
       for(int i=0; i<s.size(); i++) {
           auto it = m.find(s[i]);
           if((it != m.end()) && (it->second >= start)) {
               start = it->second;
           }
           m[s[i]] = i;
           maxLen = max(maxLen, i-start);
       }
       
       return maxLen;
   }
};

其他解法:上面用哈希表進行查詢雖然相比常規(guī)查詢要節(jié)省時間兜喻,但是我們還可以通過更簡潔的方法來實現(xiàn)梦染。我們可以用一種更巧妙的方法,因為一個字符占一個字節(jié)朴皆,八位帕识,字符的ascii范圍是在256范圍內的,我們可以建立一個256大小的數組遂铡,每次字符的查詢可以直接通過數組元素地址直接尋址肮疗,每一個數組元素的下標就是該字符的ascii值,該數組元素的值是該字符出現(xiàn)在字符串中的位置忧便,每次遍歷字符串中的字符族吻,如果沒出現(xiàn)重復則元素為默認值,累計字符串長度珠增,如果出現(xiàn)重復則將元素值置為當前字符位置超歌,并且重新計算長度,這樣依次遍歷完蒂教,計算出最長子串長度巍举,時間復雜度會更低。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int maxlen=0;
        int start=-1;
        vector<int> vt(256,-1);
        for(int i=0;i<s.size();++i)
        {
            if(vt[s[i]]>start)
            {
                start=vt[s[i]];
            }
            vt[s[i]]=i;
            maxlen=max(maxlen,i-start);
        }
        return maxlen;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凝垛,一起剝皮案震驚了整個濱河市懊悯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梦皮,老刑警劉巖炭分,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剑肯,居然都是意外死亡捧毛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門让网,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呀忧,“玉大人,你說我怎么就攤上這事溃睹《耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵因篇,是天一觀的道長泞辐。 經常有香客問我笔横,道長,這世上最難降的妖魔是什么铛碑? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任狠裹,我火速辦了婚禮,結果婚禮上汽烦,老公的妹妹穿的比我還像新娘。我一直安慰自己莉御,他們只是感情好撇吞,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著礁叔,像睡著了一般牍颈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琅关,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天煮岁,我揣著相機與錄音,去河邊找鬼涣易。 笑死画机,一個胖子當著我的面吹牛,可吹牛的內容都是我干的新症。 我是一名探鬼主播步氏,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徒爹!你這毒婦竟也來了荚醒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤隆嗅,失蹤者是張志新(化名)和其女友劉穎界阁,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體胖喳,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡泡躯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了禀晓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片精续。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粹懒,靈堂內的尸體忽然破棺而出重付,到底是詐尸還是另有隱情,我是刑警寧澤凫乖,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布确垫,位于F島的核電站弓颈,受9級特大地震影響,放射性物質發(fā)生泄漏删掀。R本人自食惡果不足惜翔冀,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望披泪。 院中可真熱鬧纤子,春花似錦、人聲如沸款票。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艾少。三九已至卡乾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缚够,已是汗流浹背幔妨。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谍椅,地道東北人误堡。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像毯辅,于是被迫代替她去往敵國和親埂伦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容