Java實現(xiàn)每日一道算法面試題(3):leetcode3 無重復(fù)字符的最長子串

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

示例1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因為無重復(fù)字符的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因為無重復(fù)字符的最長子串是 "b"贝攒,所以其長度為 1。

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因為無重復(fù)字符的最長子串是"wke"时甚,所以其長度為 3隘弊。
    請注意,你的答案必須是 子串 的長度荒适,"pwke"是一個子序列梨熙,不是子串。

算法思路:

  1. 暴力法:逐個檢查所有的子字符串刀诬,看它是否不含有重復(fù)的字符咽扇;算法復(fù)雜度0(n^2);
  2. 借助隊列先進先出的屬性:遍歷字符串的同時判斷當前字符是否包含在前面遍歷的子字符串中舅列,若存在則依次把隊列中的字符串“出列”肌割,直到與當前遍歷到的字符相同的字符“出列”為止;若不存在則字符串長度加1帐要,繼續(xù)遍歷把敞。每次遍歷的時候要比較記錄的最大長度和每個子串的長度,取最大值賦值給最大長度榨惠;利用這種思路實現(xiàn)的算法效率不是很高奋早,在leecode官網(wǎng)提交的算法代碼執(zhí)行時間是8ms;
  3. 滑動窗口:借助隊列實現(xiàn)起來比較簡單赠橙,但增加了創(chuàng)建隊列和遍歷隊列的開銷耽装,可以借鑒隊列的核心原理實現(xiàn):只需要記錄子串在父串中的索引位置,不借助隊列期揪,也不新建字符串掉奄,防止增加額外的開銷。利用這種思路實現(xiàn)的算法效率比較高凤薛,在leecode官網(wǎng)提交的算法代碼執(zhí)行時間是3ms姓建;

算法代碼:暴力法的代碼比較簡單,就不寫代碼了缤苫,感興趣的可以自己實現(xiàn)一下速兔。

算法代碼:根據(jù)算法思路2,寫出的算法具體代碼如下:

    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int max = 0;
        int curMax = 0;
        ArrayDeque<Character> queue = new ArrayDeque<>();
        for (int i = 0; i < s.length(); i ++) {
            char curChar = s.charAt(i);
            if (!queue.contains(s.charAt(i))) {
                queue.add(curChar);
                curMax ++;
            } else {
                if (curMax > max) {
                    max = curMax;
                }
                char c = queue.remove();
                curMax --;
                while (c != curChar) {
                    c = queue.remove();
                    curMax --;
                }
                queue.add(curChar);
                curMax ++;
            }
        }
        if (curMax > max) {
            max = curMax;
        }
        return max;
    }

算法代碼:根據(jù)算法思路3活玲,寫出的算法具體代碼如下:

    public int lengthOfLongestSubstring(String s) {
      int max = 0; // 最長子串的長度
        int curMax = 0; // 記錄當前遍歷的子串長度
        int index = 0; // 記錄已遍歷的重復(fù)元素的位置
        char curChar;
        boolean contain = false;
        for (int i = 0; i < s.length(); i ++) {
            curChar = s.charAt(i);
            int j;
            for (j = index; j < i; j ++) {
                if (s.charAt(j) == curChar) {
                    contain = true;
                    break;
                }
            }
            if (!contain) {
                curMax ++;
                if (curMax > max) {
                    max = curMax;
                }
            } else {
                curMax = i - j;
                index = j + 1;
                contain = false;
            }
        }
        return max;
    }

??如果你有疑問或更好的算法思路涣狗,歡迎留言交流5瘛!镀钓!
??如果感覺我的文章對您有所幫助穗熬,麻煩動動小手給個喜歡,謝謝6〗ΑK缆健!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唧瘾,一起剝皮案震驚了整個濱河市措译,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饰序,老刑警劉巖领虹,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異求豫,居然都是意外死亡塌衰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門蝠嘉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來最疆,“玉大人,你說我怎么就攤上這事蚤告∨幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵杜恰,是天一觀的道長获诈。 經(jīng)常有香客問我,道長心褐,這世上最難降的妖魔是什么舔涎? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮逗爹,結(jié)果婚禮上亡嫌,老公的妹妹穿的比我還像新娘。我一直安慰自己掘而,他們只是感情好挟冠,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镣屹,像睡著了一般圃郊。 火紅的嫁衣襯著肌膚如雪价涝。 梳的紋絲不亂的頭發(fā)上女蜈,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音,去河邊找鬼伪窖。 笑死逸寓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的覆山。 我是一名探鬼主播竹伸,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼簇宽!你這毒婦竟也來了勋篓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤魏割,失蹤者是張志新(化名)和其女友劉穎譬嚣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钞它,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡拜银,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遭垛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尼桶。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锯仪,靈堂內(nèi)的尸體忽然破棺而出泵督,到底是詐尸還是另有隱情,我是刑警寧澤庶喜,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布幌蚊,位于F島的核電站,受9級特大地震影響溃卡,放射性物質(zhì)發(fā)生泄漏溢豆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一瘸羡、第九天 我趴在偏房一處隱蔽的房頂上張望漩仙。 院中可真熱鬧,春花似錦犹赖、人聲如沸队他。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麸折。三九已至,卻和暖如春粘昨,著一層夾襖步出監(jiān)牢的瞬間垢啼,已是汗流浹背窜锯。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芭析,地道東北人锚扎。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像馁启,于是被迫代替她去往敵國和親驾孔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

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