實現乙個挺高階的字元匹配演算法:
給一串很長字串,要求找到符合要求的字串,例如目的串: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)。
實現**如下:
//強大的和諧系統
intis_contain
(char *src, char *des)
return
1; //匹配成功}
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!
實現乙個挺高階的字元匹配演算法:
給一串很長字串,要求找到符合要求的字串,例如目的串: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)。
實現**如下:
//強大的和諧系統
intis_contain
(char *src, char *des)
return
1; //匹配成功}
程式設計師面試100題之十五 陣列分割
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!一 題目概述 有乙個沒有排序,元素個數為2n的正整數陣列。要求把它分割為元素個數為n的兩個陣列,並使兩個子陣列的和最接近。假設陣列a 1.2n 所有元素的和是sum。模仿動態規劃解0 1揹包問題的策略,令s k,i 表示前k個元素中任意i個元素的和...
程式設計師面試題精選100題
今天開始各種刷面試題,沉下心來集中時間,全身心投入 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。相關概念 二元查詢樹 它首先要是...
程式設計師面試100題之十一 陣列迴圈移位
設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求時間複雜度為o n 且只允許使用兩個附加變數。不合題意的解法如下 我們先試驗簡單的辦法,可以每次將陣列中的元素右移一位,迴圈k次。abcd1234 4abcd123 34abcd12 234abcd1 1234abcd。如下所示 rights...