實現乙個挺高階的字元匹配演算法:
給一串很長字串,要求找到符合要求的字串,例如目的串:123
1******3***2 ,12*****3 這些都要找出來,其實就是類似一些和諧系統。。。。。
這題的真正意思就是,給你乙個目標串,如「123」,只要乙個字串裡面同時包含1、2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。加入目標串的長度為m,模式串的長度為n,我們很容易想到o(mn)的演算法,就是兩遍for迴圈搞定。那麼有沒有更快的方法呢?
我們考慮問題的時候,如果想時間變得快,有一種方法就叫做「空間換時間」。雜湊表是一種比較複雜的資料結構。由於比較複雜,stl中沒有實現雜湊表,因此需要我們自己實現乙個。但由於本題的特殊性,我們只需要乙個非常簡單的雜湊表就能滿足要求。由於字元(char)是乙個長度為8的資料型別,因此總共有可能256 種可能。於是我們建立乙個長度為256的陣列,每個字母根據其ascii碼值作為陣列的下標對應陣列的對應項,而陣列中儲存的0、1對應每個字元是否出現。這樣我們就建立了乙個大小為256,以字元ascii碼為鍵值的雜湊表。(並不僅限於英文本元,所以這裡要考慮256種可能)。
知道了這點,我們可以構建乙個陣列來統計模式串中某個字元是否出現,然後在對目標串進行掃瞄,看看對應的所有位上是否出現,從而判斷是否匹配。分析一下複雜度,大概是o(m+n)。
實現**如下:
[cpp]view plain
copy
//強大的和諧系統
intis_contain(
char
*src,
char
*des)
return
1;//匹配成功 }
強大的和諧 高階的字元匹配演算法
實現乙個挺高階的字元匹配演算法 給一串很長字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來,其實就是類似一些和諧系統。這題的真正意思就是,給你乙個目標串,如 123 只要乙個字串裡面同時包含1 2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。...
100題 33 強大的和諧
實現乙個挺高階的字元匹配演算法 給一串很長字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來 其實就是類似一些和諧系統。這題的真正意思就是,給你乙個目標串,如 123 只要乙個字串裡面同時包含1 2和3,那麼這個字串就匹配了。系統越和諧,說明錯殺的可能行也就越大。...
字串的匹配演算法
簡單的說,就是對主串的每乙個字元作為字串的開頭,與要匹配的字串進行匹配。對主串做大迴圈,每個字元開頭做字串的長度的小迴圈,直到匹配成功或者全部遍歷為止。讓我們來分析一下,最好的情況是什麼?那就是第一開始就成功,時間時間複雜度為o 1 最壞呢,就是每次迴圈到子串最後一位才發現不對,時間複雜度為o n ...