<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)340:至多包含 K 個(gè)不同字符的最長(zhǎng)子串

          共 2488字,需瀏覽 5分鐘

           ·

          2021-08-05 01:37

          算法的重要性,我就不多說(shuō)了吧,想去大廠(chǎng),就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做 至多包含 K 個(gè)不同字符的最長(zhǎng)子串,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/longest-substring-with-at-most-k-distinct-characters/

          Given a string, find the length of the longest substring T that contains at most k distinct characters.

          定一個(gè)字符串 s ,找出 至多 包含 k 個(gè)不同字符的最長(zhǎng)子串 T。

          示例


          示例 1:

          輸入: s = "eceba", k = 2
          輸出: 3
          解釋: 則 T 為 "ece",所以長(zhǎng)度為 3。

          示例 2:

          輸入: s = "aa", k = 1
          輸出: 2
          解釋: 則 T 為 "aa",所以長(zhǎng)度為 2。


          解題

          雙指針,指針中間的是可能的答案。符合要求右指針向右擴(kuò),否則更新答案,左指針往右縮。


          class Solution {
            public int lengthOfLongestSubstringKDistinct(String s, int k) {
              int n = s.length();
              if (n < k+1) return n;
           
              int left = 0;
              int right = 0;
              //K-V:K是對(duì)應(yīng)字符,V是最后一次出現(xiàn)的位置。
              HashMap<Character, Integer> hashmap = new HashMap<Character, Integer>();
           
              int max_len = 0;
           
              while (right < n) {
                  //符合要求就繼續(xù)向右擴(kuò)
                  if (hashmap.size() < k+1){
                      hashmap.put(s.charAt(right), right++);
                  }
                  if (hashmap.size() == k+1) {
                      int index = Collections.min(hashmap.values());
                      hashmap.remove(s.charAt(index));
                      left = index + 1;
                  }
                max_len = Math.max(max_len, right - left);
              }
              return max_len;
            }
          }


          好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-320題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)321:拼接最大數(shù)
          LeetCode刷題實(shí)戰(zhàn)322:零錢(qián)兌換
          LeetCode刷題實(shí)戰(zhàn)323:無(wú)向圖中連通分量的數(shù)目
          LeetCode刷題實(shí)戰(zhàn)324:擺動(dòng)排序 II
          LeetCode刷題實(shí)戰(zhàn)325:和等于 k 的最長(zhǎng)子數(shù)組長(zhǎng)度
          LeetCode刷題實(shí)戰(zhàn)326:3的冪
          LeetCode刷題實(shí)戰(zhàn)327:區(qū)間和的個(gè)數(shù)
          LeetCode刷題實(shí)戰(zhàn)328:奇偶鏈表
          LeetCode刷題實(shí)戰(zhàn)329:矩陣中的最長(zhǎng)遞增路徑
          LeetCode刷題實(shí)戰(zhàn)330:按要求補(bǔ)齊數(shù)組
          LeetCode刷題實(shí)戰(zhàn)331:驗(yàn)證二叉樹(shù)的前序序列化
          LeetCode刷題實(shí)戰(zhàn)332:重新安排行程

          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天婷婷丁香综合性爱网 | 天天日天天目 | 午夜无码视频 | 大香蕉伊人综合 | 先峰成人在线 |