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

機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)

這篇具有很好參考價(jià)值的文章主要介紹了機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)

機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)

?機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)


算法小白的代碼如下↓

class Solution(object):
    def findAnagrams(self, s, p):
        """
        :type s: str
        :type p: str
        :rtype: List[int]
        """

        # 輸出列表
        answer_list=[]

        # p的長度
        p_len=len(p)

        # 索引遍歷s的子串
        for i in range(len(s)):

            # 最后一次循環(huán)
            if i+p_len>len(s):
                break

            # 切分s子串
            s_split=s[i:i+p_len]
            
            # 定義類方法,若s的子串與p為異位詞
            if self.is_yiweici(s_split,p):
                
                # 則向輸出列表中添加索引
                answer_list.append(i)

        return answer_list

    # 類方法,判斷s的子串與p是否為異位詞
    def is_yiweici(self,a,b):

        if a==b:
            return True

        used_lst=[]

        # 遍歷子串的每一個(gè)字符
        for i in a:

            if i in used_lst:
                continue
            
            # 如果字符未出現(xiàn)在b中
            if i not in b:

                # 返回False
                return False
            
            # 若字符出現(xiàn)在b中
            else:
                if a.count(i) != b.count(i):
                    return False
                
                else:

                # str2=str1.replace(old_str,new_str,count)
                # count:替換的次數(shù),默認(rèn)是全部替換
                # 返回值:得到一個(gè)新的字符串,不會(huì)改變原來的字符串
                    b=b.replace(i,'')

                used_lst.append(i)
                
        return True

但是超時(shí)了……

雖然代碼沒有提交成功,但是需要注意幾個(gè)點(diǎn):

①類中方法的參數(shù)self:在類的內(nèi)部,使用 def 關(guān)鍵字來定義一個(gè)方法,與一般函數(shù)定義不同,類方法必須包含參數(shù)self, 且為第一個(gè)參數(shù),self代表的是類的實(shí)例。

  • self:類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——必須有一個(gè)額外的第一個(gè)參數(shù)名稱, 按照慣例它的名稱是self。
  • 類的實(shí)例:是將類應(yīng)用在實(shí)例場景之中,比如有個(gè)類里的函數(shù)是f,假如這個(gè)f具有print某一時(shí)刻的天氣狀況的能力,那么如果我需要這個(gè)f來print一下今天12點(diǎn)的天氣,那么讓他打印今天12點(diǎn)的天氣這個(gè)動(dòng)作,就是類的實(shí)例化,讓類中的函數(shù)具有的能力變成真實(shí)的動(dòng)作。

②Python replace() 方法?把字符串中的 old(舊字符串) 替換成 new(新字符串),如果指定第三個(gè)參數(shù)max,則替換不超過 max 次。

返回值:得到一個(gè)新的字符串,不會(huì)改變原來的字符串

str2=str1.replace(old_str,new_str,count)

為什么超時(shí)了,因?yàn)樵谧址瑒?dòng)比較的過程中,沒有充分利用“滑動(dòng)”的性質(zhì),每一次滑動(dòng)都在重新比較,并沒有利用到“滑動(dòng)窗口”的特性。


核心思想:在字符串s中構(gòu)造一個(gè)長度與字符串p長度相同的滑動(dòng)窗口,并在滑動(dòng)中維護(hù)窗口中每種字母的數(shù)量。當(dāng)窗口中每種字母的數(shù)量與字符串p相同時(shí),則說明當(dāng)前窗口為字符串p的異位詞。


機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:

        # 記錄s和p的長度
        s_len, p_len = len(s), len(p)
        
        # 特殊情況,若s的長度小于p的長度,直接返回空列表
        if s_len < p_len:
            return []
         
        ans = []

        # s_count為滑動(dòng)窗口
        s_count = [0] * 26
        p_count = [0] * 26
        
        # 依題意,p_count統(tǒng)計(jì)p中各字母的數(shù)量
        for i in range(p_len):
            s_count[ord(s[i]) - 97] += 1
            p_count[ord(p[i]) - 97] += 1
        
        # 當(dāng)初始位置s_count==p_count,將索引0添加至列表
        if s_count == p_count:
            ans.append(0)
        
        # 滑動(dòng)窗口
        for i in range(s_len - p_len):
            s_count[ord(s[i]) - 97] -= 1
            s_count[ord(s[i + p_len]) - 97] += 1
            
            if s_count == p_count:
                ans.append(i + 1)

        return ans

需要注意:
①滑動(dòng)窗口的長度為p_len。

②ASCII碼,全稱為 American Standard Code for Information Interchange,python中的 ord() 函數(shù)主要用來返回對(duì)應(yīng)字符的ASCII碼。

ord('a')==97

ord('A')==65

?

機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)


官方題解還給出了另一種滑動(dòng)窗口的方法(基于differ差量)

此處僅給出思路和算法,代碼省略

機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)文章來源地址http://www.zghlxwxcb.cn/news/detail-459955.html

到了這里,關(guān)于機(jī)試打卡 -01 字母異位詞(滑動(dòng)窗口)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 機(jī)試打卡 -06 異位詞分組(哈希表)

    機(jī)試打卡 -06 異位詞分組(哈希表)

    ? 最容易想到的是利用 ord( ) 函數(shù) ,按照字母 計(jì)數(shù) 的特征歸類,代碼如下: ①ord(\\\'a\\\')==97。 ②字典的key必須是可哈希的! 一個(gè)對(duì)象在其生命周期內(nèi),如果保持不變,就是hashable(可哈希的)。 hashable ≈ imutable? ? ? 可哈希 ≈ 不可變 在Python中: list、set和dictionary 都是可改變的

    2024年02月06日
    瀏覽(12)
  • 255.【華為OD機(jī)試】最小矩陣寬度(滑動(dòng)窗口算法-Java&Python&C++&JS實(shí)現(xiàn))

    ??點(diǎn)擊這里可直接跳轉(zhuǎn)到本專欄,可查閱頂置最新的華為OD機(jī)試寶典~ 本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼(JavaPythonC++JS分別實(shí)現(xiàn)),詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年03月13日
    瀏覽(23)
  • 【算法題】49. 字母異位詞分組

    給你一個(gè)字符串?dāng)?shù)組,請你將 字母異位詞 組合在一起??梢园慈我忭樞蚍祷亟Y(jié)果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個(gè)新單詞。 示例 1: 輸入: strs = [\\\"eat\\\", \\\"tea\\\", \\\"tan\\\", \\\"ate\\\", \\\"nat\\\", \\\"bat\\\"] 輸出: [[\\\"bat\\\"],[\\\"nat\\\",\\\"tan\\\"],[\\\"ate\\\",\\\"eat\\\",\\\"tea\\\"]] 示例 2: 輸入: strs = [\\\"\\\"] 輸出:

    2024年01月22日
    瀏覽(29)
  • Java【手撕滑動(dòng)窗口】LeetCode 438. “字符串中所有異位詞“, 圖文詳解思路分析 + 代碼

    Java【手撕滑動(dòng)窗口】LeetCode 438. “字符串中所有異位詞“, 圖文詳解思路分析 + 代碼

    各位讀者好, 我是小陳, 這是我的個(gè)人主頁, 希望我的專欄能夠幫助到你: ?? JavaSE基礎(chǔ): 基礎(chǔ)語法, 類和對(duì)象, 封裝繼承多態(tài), 接口, 綜合小練習(xí)圖書管理系統(tǒng)等 ?? Java數(shù)據(jù)結(jié)構(gòu): 順序表, 鏈表, 堆, 二叉樹, 二叉搜索樹, 哈希表等 ?? JavaEE初階: 多線程, 網(wǎng)絡(luò)編程, TCP/IP協(xié)議, HTTP協(xié)議

    2024年02月10日
    瀏覽(21)
  • 算法刷題-哈希表-有效的字母異位詞

    算法刷題-哈希表-有效的字母異位詞

    數(shù)組就是簡單的哈希表,但是數(shù)組的大小可不是無限開辟的 力扣題目鏈接 給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的字母異位詞。 示例 1: 輸入: s = “anagram”, t = “nagaram” 輸出: true 示例 2: 輸入: s = “rat”, t = “car” 輸出: false 說明: 你可以假設(shè)字符串只包

    2024年02月09日
    瀏覽(24)
  • Python算法題集_字母異位詞分組

    本文為Python算法題集之一的代碼示例 題目49:字母異位詞分組 說明:給你一個(gè)字符串?dāng)?shù)組,請你將 字母異位詞 組合在一起,可以按任意順序返回結(jié)果列表 字母異位詞 :是由重新排列原單詞所有字母得到的新單詞 使用同步數(shù)組 list 和檢索集合 set 使用同步數(shù)組 list 和結(jié)果數(shù)

    2024年01月20日
    瀏覽(39)
  • Day 6 哈希表part01:242.有效的字母異位詞 , 349. 兩個(gè)數(shù)組的交集 , 202. 快樂數(shù), 1. 兩數(shù)之和

    Day 6 哈希表part01:242.有效的字母異位詞 , 349. 兩個(gè)數(shù)組的交集 , 202. 快樂數(shù), 1. 兩數(shù)之和

    哈希表理論基礎(chǔ)? 要了解哈希表的內(nèi)部實(shí)現(xiàn)原理,哈希函數(shù),哈希碰撞,以及常見哈希表的區(qū)別,數(shù)組,set?和map。?? 什么時(shí)候想到用哈希法,當(dāng)我們遇到了 要快速判斷一個(gè)元素是否出現(xiàn)集合里的時(shí)候 ,就要考慮 哈希法 。 ?這句話很重要,大家在做哈希表題目都要思考這

    2024年02月15日
    瀏覽(23)
  • 【LeetCode熱題100】打卡第42天:滑動(dòng)窗口最大值&搜索二維矩陣II

    【LeetCode熱題100】打卡第42天:滑動(dòng)窗口最大值&搜索二維矩陣II

    大家好,我是知識(shí)汲取者,歡迎來到我的LeetCode熱題100刷題專欄! 精選 100 道力扣(LeetCode)上最熱門的題目,適合初識(shí)算法與數(shù)據(jù)結(jié)構(gòu)的新手和想要在短時(shí)間內(nèi)高效提升的人,熟練掌握這 100 道題,你就已經(jīng)具備了在代碼世界通行的基本能力。在此專欄中,我們將會(huì)涵蓋各種

    2024年02月10日
    瀏覽(28)
  • 【算法挨揍日記】day07——904. 水果成籃、438. 找到字符串中所有字母異位詞

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

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

    2024年02月07日
    瀏覽(21)
  • 算法訓(xùn)練第5天|哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    算法訓(xùn)練第5天|哈希表理論基礎(chǔ) 242.有效的字母異位詞 349. 兩個(gè)數(shù)組的交集 202. 快樂數(shù) 1. 兩數(shù)之和

    哈希表是根據(jù) 關(guān)鍵碼 的值而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。 一般哈希表都是用來快速判斷一個(gè)元素是否出現(xiàn)集合里。 數(shù)組、集合set、映射map 力扣鏈接 題目描述: 給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的字母異位詞。 注意: 若? s ?和? t ? 中每個(gè)字符出現(xiàn)的

    2024年02月19日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包