實現乙個挺高階的字元匹配演算法:
給一串很長字串,要求找到符合要求的字串,例如目的串: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,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。...