33. 字符串匹配算法

題目: 給一個很長字符串,要求找到符合要求的字符串,例如目的串123,1***3***2,12****3這些都要找出來spa

解: 這題的意思是,例如給定目的串S="abc",那麼在這個很長的字符串中尋找子字符串,這個子字符串中知足S中的每一個字符都要出現,而且S中的某一個字符只出現1次。.net

待匹配字串長度位n,模式字符串長度位mblog

1。對待匹配字符串的每個字符進行m次匹配,記錄下S中每一個字符出現個數,當個數都>=1時結束,此時是知足條件的1個子字符串,而後從這個子字符串的下一個字符開始匹配字符串

時間是O(m*n)get

2.hash的方法。對目的串hash,遍歷待匹配字符串,對每一個字符hash,若某個子字符串知足目的串的每一個字符hash值都出現就是hash

3。變量

  與此題相相似:
  就是給一個很長的字符串str 還有一個字符集好比{a,b,c} 找出str裏包含{a,b,c}的最短子串。
  要求O(n)?
  好比,字符集是a,b,c,字符串是abdcaabcx,則最短子串爲abc。遍歷


  用兩個變量 front rear 指向一個的子串區間的頭和尾
  用一個int cnt[255]={0}記錄當前這個子串裏 字符集a,b,c 各自的個數,
  一個變量sum記錄字符集裏有多少個了方法

  rear 一直加,更新cnt[]和sum的值,直到 sum等於字符集個數
  而後front++,直到cnt[]裏某個字符個數爲0,這樣就找到一個符合條件的字串了時間

  繼續前面的操做,就能夠找到最短的了。

 

  http://blog.csdn.net/v_july_v/article/details/6126444

相關文章
相關標籤/搜索