100題 33 強大的和諧

2021-09-06 02:42:57 字數 820 閱讀 7873

實現乙個挺高階的字元匹配演算法:

給一串很長字串,要求找到符合要求的字串,例如目的串:123

1******3***2 ,12*****3 這些都要找出來

其實就是類似一些和諧系統。。。。。

這題的真正意思就是,給你乙個目標串,如「123」,只要乙個字串裡面同時包含1、2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。加入目標串的長度為m,模式串的長度為n,我們很容易想到o(mn)的演算法,就是兩遍for迴圈搞定。那麼有沒有更快的方法呢?

我們考慮問題的時候,如果想時間變得快,有一種方法就叫做「空間換時間」。我們知道對於擴充套件ascii來說,只有256個字元。知道了這點,我們可以構建乙個陣列來統計模式串中某個字元是否出現,然後在對目標串進行掃瞄,看看對應的所有為上是否出現,從而判斷是否匹配。分析一下複雜度,大概是o(m+n)。

下面是用python寫的**:

# -*- coding: cp936 -*-    

'''強大的和諧系統'''

def is_contain(src, des):

ha = [0 for i in range(256)]

for x in src:

ha[ord(x)] = 1

flag = true

for y in des:

if ha[ord(y)] == 0:

flag = false

break

return flag

if __name__ == '__main__':

print(is_contain('1acdbefg', 'abc'))

程式設計師面試100題之十四 強大的和諧

實現乙個挺高階的字元匹配演算法 給一串很長字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來,其實就是類似一些和諧系統。這題的真正意思就是,給你乙個目標串,如 123 只要乙個字串裡面同時包含1 2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。...

強大的和諧 高階的字元匹配演算法

實現乙個挺高階的字元匹配演算法 給一串很長字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來,其實就是類似一些和諧系統。這題的真正意思就是,給你乙個目標串,如 123 只要乙個字串裡面同時包含1 2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。...

強大的和諧 高階的字元匹配演算法

實現乙個挺高階的字元匹配演算法 給一串很長字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來,其實就是類似一些和諧系統。這題的真正意思就是,給你乙個目標串,如 123 只要乙個字串裡面同時包含1 2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。...