国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題)

這篇具有很好參考價(jià)值的文章主要介紹了力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本題鏈接??找到字符串中所有字母異位詞

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法


第一步:了解題意

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法

給定2個(gè)字符串s和p,找到s中所有p的變位詞的字串,就是p是"abc",在s串中找到與p串相等的字串,可以位置不同,但是字母必須相同,比如”bca","bac"等,都是可以被稱之為變位詞。最終返回與p串字母相等但排列不同的字符串的初始索引即可。

例如 P="abc" { "abc","acb","cab","cba"}都是它的異位詞。

S=“cbaebabacd" P="abc"

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法符合條件的2組"cba"起始索引是0,"bac"起始索引是6,所以結(jié)果是[0,6].


第二步:算法原理

首先看到這個(gè)題目我們就會(huì)想到如何快速判斷2個(gè)字符串是否是"異位詞"

  • 統(tǒng)計(jì)字符串中字符出現(xiàn)個(gè)數(shù)統(tǒng)計(jì) 統(tǒng)計(jì)就用hash表

這時(shí)候我們就想到了hash表,哈希表用來記錄出現(xiàn)個(gè)數(shù),對(duì)于下標(biāo)的映射。首先給hash表各個(gè)元素都設(shè)置成0,然后依次存入a計(jì)入,然后讓字符a的個(gè)數(shù)++,a的映射就是1,依次記錄。所以p和s的字符串都用hash表來記錄。

第一種解法:暴力枚舉+哈希

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法

首先我們將P字符串依次存入hash1表中,Q字符串依次存入hash2表中。

定義2個(gè)指針都從頭開始,依次計(jì)入hash2表中,然后當(dāng)right-left+1>P字符串的長(zhǎng)度時(shí)候,我們就判斷倆個(gè)哈希表是否相等。然后清空hash2表。

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法再存入新的值之前我們需要給"cba"存入hash2表值去才能重新存入。

這樣我們看著肯定是很繁瑣的,為什么right要重新回到left下一個(gè)位置重新開始呢?為什么不right++呢?這就是可以優(yōu)化的地方。

所謂優(yōu)化就是:

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法

right不往回跑,left往后++,就是刪除left所在的位置的值在hash2表中,增加right后面對(duì)應(yīng)的值存入hash2表中。


第二種解法:滑動(dòng)窗口+哈希

滑動(dòng)窗口的模板:

1.left=0,right=0;

2.進(jìn)窗口

3.判斷

4.出窗口

更新結(jié)果(這是是在上面的4個(gè)步驟中根據(jù)題目的不同來穿插的)

2.進(jìn)窗口

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法將right對(duì)應(yīng)的值存入到hash2表中去。

3.判斷

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法當(dāng)right-left+1>len(p),那么我們就要進(jìn)行判斷了。這時(shí)候開始出窗口了。

4.出窗口

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法出窗口其實(shí)就是left對(duì)應(yīng)的值從hash2表中刪除,然后left++即可。

肯定很多人想知道這里是如何更新結(jié)果的,我們?nèi)绾魏蚿字符串進(jìn)行判斷?

?5.更新結(jié)果

我們可以再進(jìn)窗口的時(shí)候就對(duì)其進(jìn)行操作為后續(xù)的更新結(jié)果奠定基礎(chǔ)。

主要進(jìn)行的步驟就是 進(jìn)窗口(后)對(duì)count的更新 和 出窗口(前)對(duì)count的更新

利用count變量來統(tǒng)計(jì)窗口中"有效字符"的個(gè)數(shù)

in和out就是對(duì)應(yīng)的字符

進(jìn)窗口:進(jìn)入后 hash2[in]<=hash1[in] count++;

出窗口:? 出去前?hash2[out]<=hash1[out] count--;

更新結(jié)果 count==len(p) ;

進(jìn)窗口+count維護(hù)

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法


更新結(jié)果

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法


出窗口+count維護(hù)

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法

這就是進(jìn)窗口(后)和出窗口(前)進(jìn)行count維護(hù)。


第三步:實(shí)現(xiàn)代碼

class Solution {
public:
    vector<int> findAnagrams(string s, string p) 
    {
         int hashp[26]={0};//統(tǒng)計(jì)p字符串中各字符的個(gè)數(shù)
         vector<int>ret;//記錄結(jié)果
        for(auto ch:p) hashp[ch-'a']++;
         int hashs[26]={0};//統(tǒng)計(jì)s字符串中各字符的個(gè)數(shù)
         int left=0,right=0;
         int len=p.size(),count=0;
        while(right<s.size())
         {
            if(++hashs[s[right]-'a']<=hashp[s[right]-'a'])count++;//進(jìn)窗口+維護(hù)count
            if(right-left+1>len)//判斷
            {
                if(hashs[s[left]-'a']--<=hashp[s[left]-'a'])count--;//出窗口+維護(hù)count
                left++;
            }
            //更新結(jié)果
            if(count==len) ret.push_back(left);
            right++;
         }
         return ret;
    }
};

小知識(shí):

力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題),算法,leetcode,算法


正在寒假的提升版。文章來源地址http://www.zghlxwxcb.cn/news/detail-804304.html

到了這里,關(guān)于力扣精選算法100題——找到字符串中所有字母異位詞(滑動(dòng)窗口專題)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【算法挨揍日記】day07——904. 水果成籃、438. 找到字符串中所有字母異位詞

    【算法挨揍日記】day07——904. 水果成籃、438. 找到字符串中所有字母異位詞

    904.?水果成籃 你正在探訪一家農(nóng)場(chǎng),農(nóng)場(chǎng)從左到右種植了一排果樹。這些樹用一個(gè)整數(shù)數(shù)組? fruits ?表示,其中? fruits[i] ?是第? i ?棵樹上的水果? 種類 ?。 你想要盡可能多地收集水果。然而,農(nóng)場(chǎng)的主人設(shè)定了一些嚴(yán)格的規(guī)矩,你必須按照要求采摘水果: 你只有? 兩個(gè)

    2024年02月07日
    瀏覽(21)
  • 【算法思考記錄】動(dòng)態(tài)規(guī)劃入門!力扣2606. 找到最大開銷的子字符串【Python3、動(dòng)態(tài)規(guī)劃】

    原題鏈接 動(dòng)態(tài)規(guī)劃(Dynamic Programming,簡(jiǎn)稱 DP)是一種通過將原問題分解為相互重疊的子問題并只解決一次的方法來解決問題的算法優(yōu)化技術(shù)。動(dòng)態(tài)規(guī)劃通常用于優(yōu)化遞歸問題,通過存儲(chǔ)子問題的解來避免重復(fù)計(jì)算,從而顯著提高算法的效率。 動(dòng)態(tài)規(guī)劃的基本思想是將原問題

    2024年02月03日
    瀏覽(26)
  • 438. 找到字符串中所有字母異位詞【異位詞-哈希數(shù)組】

    438. 找到字符串中所有字母異位詞 給定兩個(gè)字符串 s 和 p,找到 s 中所有 p 的 異位詞 的子串,返回這些子串的起始索引。不考慮答案輸出的順序。 異位詞 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 輸入: s = “cbaebabacd”, p = “abc” 輸出: [0,6] 解釋: 起

    2023年04月27日
    瀏覽(23)
  • 【力扣JavaScript】1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng)
  • 【算法詳解】力扣415.字符串相加

    力扣鏈接:力扣415.字符串相加 給定兩個(gè)字符串形式的非負(fù)整數(shù) num1 和num2 ,計(jì)算它們的和并同樣以字符串形式返回。 你不能使用任何內(nèi)建的用于處理大整數(shù)的庫(kù)(比如 BigInteger), 也不能直接將輸入的字符串轉(zhuǎn)換為整數(shù)形式。 示例 1: 輸入:num1 = “11”, num2 = “123” 輸出:

    2024年01月22日
    瀏覽(31)
  • 算法學(xué)習(xí)——LeetCode力扣字符串篇

    算法學(xué)習(xí)——LeetCode力扣字符串篇

    344. 反轉(zhuǎn)字符串 - 力扣(LeetCode) 描述 編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組 s 的形式給出。 不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問題。 示例 示例 1: 輸入:s = [“h”,“e”,“l(fā)”

    2024年02月20日
    瀏覽(21)
  • 《熱題100》字符串、雙指針、貪心算法篇

    《熱題100》字符串、雙指針、貪心算法篇

    思路:對(duì)于輸入的的字符串,只有三種可能,ipv4,ipv6,和neither ipv4:四位,十進(jìn)制,無前導(dǎo)0,小于256 ipv6:八位,十六進(jìn)制,無多余0(00情況不允許),不為空 class Solution: ? ? def solve(self , IP: str) - str: ? ? ? ? if \\\'.\\\' in ?IP: #有可能是IPV4 ? ? ? ? ? ? res = IP.split(\\\'.\\\') ? ? ? ? ? ?

    2024年02月09日
    瀏覽(21)
  • 力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼

    力扣熱門算法題 349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼

    349. 兩個(gè)數(shù)組的交集,387. 字符串中的第一個(gè)唯一字符,394. 字符串解碼,每題做詳細(xì)思路梳理,配套PythonJava雙語代碼, 2024.04.02?可通過leetcode所有測(cè)試用例。 目錄 349. 兩個(gè)數(shù)組的交集 解題思路 完整代碼 Python Java 387. 字符串中的第一個(gè)唯一字符 解題思路 完整代碼 Python Java

    2024年04月08日
    瀏覽(31)
  • 算法:刪除字符串中的所有相鄰重復(fù)項(xiàng)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 目錄 一、問題描述 二、棧解法 三、雙指針解法 總結(jié) 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 給出由小寫字母組成的字符串str,重復(fù)項(xiàng)刪除操作會(huì)選擇兩個(gè)相鄰且相同的字母,并刪除它們。

    2024年01月22日
    瀏覽(21)
  • LeeCode前端算法基礎(chǔ)100題(21) 同構(gòu)字符串

    一、問題詳情: 給定兩個(gè)字符串? s ?和? t ?,判斷它們是否是同構(gòu)的。 如果? s ?中的字符可以按某種映射關(guān)系替換得到? t ?,那么這兩個(gè)字符串是同構(gòu)的。 每個(gè)出現(xiàn)的字符都應(yīng)當(dāng)映射到另一個(gè)字符,同時(shí)不改變字符的順序。不同字符不能映射到同一個(gè)字符上,相同字符只

    2024年01月19日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包