LeetCode - 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.





















思路:

  • 使用HashMap存儲(chǔ)字符及其位置,key為字符,value為字符出現(xiàn)的位置;

  • 使用start記錄子字符串的起始位置;

  • 使用max記錄符合條件的子字符串的最大長度:max = Math.max(max, index - start + 1);

  • 遍歷字符串中的每個(gè)字符,用index記錄位置,取到每個(gè)字符s.charAt(i)浴滴,先判斷HashMap中是否已存在此字符;

  • 如果不存在此字符則將其存入HashMap:
    例如字符串abcdaHashMap中依次存入(a, 0)(b, 1)菌羽、(c, 2)(d, 3).

  • 如果存在此相同字符:
    1由缆、說明已找到一個(gè)符合條件的子字符串(起始位置為start注祖,終止位置為index的上一個(gè)位置);
    例如字符串abcdaea,找到第五個(gè)字符a為已存在字符均唉,則找到符合條件的子字符串為abcd;
    例如字符串abcddea是晨,找到第五個(gè)字符d為已存在字符,則找到符合條件的子字符串為abcd.
    2舔箭、在HashMap中找到此字符的value值(也就是位置)罩缴,記為p,更新子字符串的起始start位置:如果start >= p + 1,則仍保留start位置靴庆,否則更新start = p + 1;
    例如字符串abcddea时捌,找到相同字符d,第一次出現(xiàn)位置為3炉抒,start值為0奢讨,則應(yīng)更新start4.
    例如字符串abcdaea,找到相同字符a焰薄,第一次出現(xiàn)位置為0拿诸,start值為0,則應(yīng)更新start1.
    3塞茅、更新此字符在HashMap中的value值亩码,即更新它的位置.

  • 遍歷結(jié)束后,返回max的值.

  • 實(shí)現(xiàn)代碼

    public int lengthOfLongestSubstring(String s) {
      if (s.length() == 0) {
          return 0;
      }
      HashMap<Character, Integer> map = new HashMap<>();
      int max = 0;
      for (int index = 0, start = 0; index < s.length(); ++ index) {
          if (map.containsKey(s.charAt(index))) {
              start = Math.max(start, map.get(s.charAt(index)) + 1);
          }
          map.put(s.charAt(index), index);
          max = Math.max(max, index - start + 1);
      }
      return max;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末野瘦,一起剝皮案震驚了整個(gè)濱河市描沟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鞭光,老刑警劉巖吏廉,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惰许,居然都是意外死亡席覆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門汹买,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佩伤,“玉大人,你說我怎么就攤上這事晦毙∩玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵结序,是天一觀的道長障斋。 經(jīng)常有香客問我,道長徐鹤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任邀层,我火速辦了婚禮返敬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寥院。我一直安慰自己劲赠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凛澎,像睡著了一般霹肝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塑煎,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天沫换,我揣著相機(jī)與錄音,去河邊找鬼最铁。 笑死讯赏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冷尉。 我是一名探鬼主播漱挎,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼雀哨!你這毒婦竟也來了磕谅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤雾棺,失蹤者是張志新(化名)和其女友劉穎膊夹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垢村,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡割疾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘉栓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏榕。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侵佃,靈堂內(nèi)的尸體忽然破棺而出麻昼,到底是詐尸還是另有隱情,我是刑警寧澤馋辈,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布抚芦,位于F島的核電站,受9級(jí)特大地震影響迈螟,放射性物質(zhì)發(fā)生泄漏叉抡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一答毫、第九天 我趴在偏房一處隱蔽的房頂上張望褥民。 院中可真熱鬧,春花似錦洗搂、人聲如沸消返。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撵颊。三九已至宇攻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倡勇,已是汗流浹背逞刷。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留译隘,地道東北人亲桥。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像固耘,于是被迫代替她去往敵國和親题篷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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