33、實現乙個挺高階的字元匹配演算法:
給一串很長字串,要求找到符合要求的字串,例如目的串:123
1******3***2 ,12*****3 這些都要找出來
其實就是類似一些和諧系統。。。。。
參考這題的真正意思就是,給你乙個目標串,如「123」,只要乙個字串裡面同時包含1、2和3,那麼這個字元
串就匹配了。系統越和諧,說明錯殺的可能行也就越大。加入目標串的長度為m,模式串的長度為n,我們很
容易想到o(mn)的演算法,就是兩遍for迴圈搞定。那麼有沒有更快的方法呢?
我們考慮問題的時候,如果想時間變得快,有一種方法就叫做「空間換時間」。我們知道對於擴充套件ascii來
說,只有256個字元。知道了這點,我們可以構建乙個陣列來統計模式串中某個字元是否出現,然後在對目
標串進行掃瞄,看看對應的所有為上是否出現,從而判斷是否匹配。分析一下複雜度,大概是o(m+n)。
優化參考:
o(n)到o(n+m)的素數方法
1、定義最小的26個素數分別與字元'a'到'z'對應。
2.遍歷長字串,求得每個字元對應素數的乘積。
3.遍歷短字串,判斷乘積能否被短字串中的字元對應的素數整除。
33 字串匹配演算法
題目 給乙個很長字串,要求找到符合要求的字串,例如目的串123,1 3 2,12 3這些都要找出來 解 這題的意思是,例如給定目的串s abc 那麼在這個很長的字串中尋找子字串,這個子字串中滿足s中的每個字元都要出現,並且s中的某乙個字元只出現1次。設待匹配字串長度位n,模式字串長度位m 1。對待匹...
第四周 3 3 字串匹配
時間限制 1 sec 空間限制 256 mb 給定乙個大串 a 和乙個模式串 b,求 b 在 a 的哪些位置出現 輸出這些出現位置的起始位置,下標從 0 開始 第一行乙個正整數 n,表示串 a 的長度。第二行包含乙個長度為 n 的串 a。第三行乙個正整數 m,表示串 b 的長度。第四行包含乙個長度為...
(演算法練習) 201409 3字串匹配
良心第三題 暴力匹配的,如果遇到不敏感,那麼把原始的字串和後面輸入需要匹配的字串都轉成小寫來處理 同樣也可都轉成大寫 在匹配的時候內層套個while迴圈,從每一位開始看能不能匹配到標準字串的末尾,成功,break,記錄這個字串 ac include include include include u...