<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刷題實戰(zhàn)438:找到字符串中所有字母異位詞

          共 2670字,需瀏覽 6分鐘

           ·

          2021-11-15 02:47

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

          今天和大家聊的問題叫做?找到字符串中所有字母異位詞,我們先來看題面:
          https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/

          Given two strings s and p, return an array of all the start indices of p's anagrams in s. You may return the answer in any order.


          An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.


          給定兩個字符串 s 和 p,找到 s 中所有 p 的 異位詞 的子串,返回這些子串的起始索引。不考慮答案輸出的順序。
          異位詞 指由相同字母重排列形成的字符串(包括相同的字符串)。

          示例

          示例?1:

          輸入: s = "cbaebabacd", p = "abc"
          輸出: [0,6]
          解釋:
          起始索引等于 0?的子串是 "cba", 它是 "abc"?的異位詞。
          起始索引等于 6?的子串是 "bac", 它是 "abc"?的異位詞。

          示例 2:

          輸入: s = "abab", p = "ab"
          輸出: [0,1,2]
          解釋:
          起始索引等于 0?的子串是 "ab", 它是 "ab"?的異位詞。
          起始索引等于 1?的子串是 "ba", 它是 "ab"?的異位詞。
          起始索引等于 2?的子串是 "ab", 它是 "ab"?的異位詞。


          解題


          class?Solution?{
          ????public?List findAnagrams(String s, String p) {
          ????????char[] arrS = s.toCharArray();
          ????????char[] arrP = p.toCharArray();
          ????????
          ????????// 接收最后返回的結(jié)果
          ????????List ans = new?ArrayList<>();
          ????????
          ????????// 定義一個 needs 數(shù)組來看 arrP 中包含元素的個數(shù)
          ????????int[] needs = new?int[26];
          ????????// 定義一個 window 數(shù)組來看滑動窗口中是否有 arrP 中的元素,并記錄出現(xiàn)的個數(shù)
          ????????int[] window = new?int[26];
          ????????
          ????????// 先將 arrP 中的元素保存到 needs 數(shù)組中
          ????????for?(int?i = 0; i < arrP.length; i++) {
          ????????????needs[arrP[i] - 'a'] += 1;
          ????????}
          ????????
          ????????// 定義滑動窗口的兩端
          ????????int?left = 0;
          ????????int?right = 0;
          ????????
          ????????// 右窗口開始不斷向右移動
          ????????while?(right < arrS.length) {
          ????????????int?curR = arrS[right] - 'a';
          ????????????right++;
          ????????????// 將右窗口當前訪問到的元素 curR 個數(shù)加 1
          ????????????window[curR] += 1;
          ????????????
          ????????????// 當 window 數(shù)組中 curR 比 needs 數(shù)組中對應(yīng)元素的個數(shù)要多的時候就該移動左窗口指針
          ????????????while?(window[curR] > needs[curR]) {
          ????????????????int?curL = arrS[left] - 'a';
          ????????????????left++;
          ????????????????// 將左窗口當前訪問到的元素 curL 個數(shù)減 1
          ????????????????window[curL] -= 1;
          ????????????}
          ????????????
          ????????????// 這里將所有符合要求的左窗口索引放入到了接收結(jié)果的 List 中
          ????????????if?(right - left == arrP.length) {
          ????????????????ans.add(left);
          ????????????}
          ????????}
          ????????return?ans;
          ????}
          }


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

          上期推文:

          LeetCode1-420題匯總,希望對你有點幫助!

          LeetCode刷題實戰(zhàn)421:數(shù)組中兩個數(shù)的最大異或值

          LeetCode刷題實戰(zhàn)422:有效的單詞方塊

          LeetCode刷題實戰(zhàn)423:從英文中重建數(shù)字

          LeetCode刷題實戰(zhàn)424:替換后的最長重復(fù)字符

          LeetCode刷題實戰(zhàn)425:單詞方塊

          LeetCode刷題實戰(zhàn)426:將二叉搜索樹轉(zhuǎn)化為排序的雙向鏈表

          LeetCode刷題實戰(zhàn)427:建立四叉樹

          LeetCode刷題實戰(zhàn)428:序列化和反序列化 N 叉樹

          LeetCode刷題實戰(zhàn)429:N 叉樹的層序遍歷

          LeetCode刷題實戰(zhàn)430:扁平化多級雙向鏈表

          LeetCode刷題實戰(zhàn)431:將 N 叉樹編碼為二叉樹

          LeetCode刷題實戰(zhàn)432:全 O(1) 的數(shù)據(jù)結(jié)構(gòu)

          LeetCode刷題實戰(zhàn)433:最小基因變化

          LeetCode刷題實戰(zhàn)434:字符串中的單詞數(shù)

          LeetCode刷題實戰(zhàn)435:無重疊區(qū)間

          LeetCode刷題實戰(zhàn)436:尋找右區(qū)間



          瀏覽 14
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  波多野结衣一区二区三区在线观看 | 免费A∨在线| 国产毛片精品一区二区色欲黄A片 | 精品人妻天天爽夜夜爽视频 | 国产美女被强躁到呻吟红视频 |