無重復(fù)字符的最長子串(Longest Substring Without Repeating Characters)

問題:

LeetCode-3

English:

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

中文:

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

示例 1:

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

示例 2:

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

示例 3:

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

請注意程腹,你的答案必須是 子串 的長度,"pwke" 是一個子序列寸潦,不是子串

解法:

通過使用HashMap來記錄字符串中的字母和字母的位置,并使用頭尾來控制字符串長度见转,每次碰到新字母長度就加一,如果頭部碰到舊字母斩箫,則將尾進一,頭進一乘客,并統(tǒng)計新子序列的長度,并找出最大的子序列

代碼實現(xiàn)(java版)

        if (s == null || s.length() == 0)
            return 0;
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int length = 0;
        int tail =0;
        for (int i = 0; i < s.length(); i++) {
            if (map.containsKey(s.charAt(i))) {
                /*
                 * 發(fā)生重復(fù)氛雪,則將tail進行前移 如果下一位是新的字母,則將其位置賦值給tail
                 *  如果是老字母报亩,說明此長度已經(jīng)計數(shù),則tail保持
                 */
                tail = Math.max(tail, map.get(s.charAt(i)) + 1);
            }
            /*
             * 字母進哈希表, 如果是新字母弦追,則開辟新空間存儲起來 
             * 如果是老字母,則將新位置賦值給老字母花竞,以便計算新長度
             */
            map.put(s.charAt(i), i);
            /*
             * 記錄下每次比較的長度,并從中找出最大值
             */
            length = Math.max(length, i - tail + 1);
        }
        return length;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末约急,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牵辣,更是在濱河造成了極大的恐慌,老刑警劉巖纬向,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逾条,居然都是意外死亡,警方通過查閱死者的電腦和手機师脂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攒磨,“玉大人,你說我怎么就攤上這事娩缰。” “怎么了拼坎?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵完疫,是天一觀的道長。 經(jīng)常有香客問我壳鹤,道長,這世上最難降的妖魔是什么芳誓? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮锹淌,結(jié)果婚禮上赂摆,老公的妹妹穿的比我還像新娘烟号。我一直安慰自己,他們只是感情好达传,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铣焊,像睡著了一般曲伊。 火紅的嫁衣襯著肌膚如雪坟募。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音赚哗,去河邊找鬼屿储。 笑死够掠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赊堪。 我是一名探鬼主播竖哩,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼群叶,長吁一口氣:“原來是場噩夢啊……” “哼街立!你這毒婦竟也來了埠通?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤梁剔,失蹤者是張志新(化名)和其女友劉穎荣病,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脖岛,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雹有。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片件舵。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡铅祸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涡扼,到底是詐尸還是另有隱情盟庞,我是刑警寧澤什猖,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布不狮,位于F島的核電站,受9級特大地震影響推掸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一胜茧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦邪铲、人聲如沸无拗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疯溺,卻和暖如春哎垦,著一層夾襖步出監(jiān)牢的瞬間漏设,已是汗流浹背郑口。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工犬性, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杆兵,地道東北人琐脏。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓吹艇,卻偏偏與公主長得像受神,于是被迫代替她去往敵國和親格侯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349