字串的包含問題

2021-06-04 21:39:23 字數 1499 閱讀 2600

問題描述:

假設這有乙個各種字母組成的字串,假設這還有另外乙個字串,而且這個字串裡的字母數相對少一些。從演算法是講,什麼方法能最快的查出所有小字串裡的字母在大字串裡都有?

比如,如果是下面兩個字串:

string 1:abcd

string 2: eahbdcauy

答案是true,所有在string1裡的字母string2也都有。

1>   輪詢的方法 時間複雜度o(n*m)

**略去..........

2>  排序方法 

時間複雜度o(m logm)+o(n logn)+o(m+n)

演算法思路:  

先對這兩個字串的字母進行排序(快速排序),然後同時對兩個字串依次輪詢。

兩個字串的排序需要(常規情況)o(m log m) + o(n log n)次操作之後的線性掃瞄需要o(m+n)次操作

。**略去........

3> 陣列儲存方法

時間複雜度 o (m+n)

直接上**:

/*** @see 字串shortstr 是否全部包含在字串longstr中 時間複雜度 o( shortstr.length +

*      longstr.length )

* @param string

*            shortstr,string longstr

* @return boolean ture -->全包含

*/private static boolean contain(string shortstr, string longstr)

boolean iscontain = true;

// 遍歷store 如果有乙個值為false 則返回false 否則返回ture

for (boolean e : store)

}return iscontain;}

演算法描述:

舉個簡單的例子好了,如abcd,abcdefg倆個字串,

1、先遍歷短字串abcd,在store陣列中想對應的abcd的位置上的單元元素置為true,

2、然後遍歷abcdefg,在store陣列中相應的abcd位置上,發現已經有了abcd,則前4個的單元元素都置為false,

(不然,繼續遍歷的話,我們會發現efg在store陣列中沒有元素(該字母對應位置為false),不作處理。最後,自然,就會發現store數                      組中的元素單元都是false

3、遍歷store陣列,發現所有的元素都已被置為false,所以程式輸出true。

4>  更有趣的做法 

時間複雜度 o (m+n)

**略去...........

演算法描述:

1.定義最小的26個素數分別與字元'a'到'z'對應。

2.遍歷長字串,求得每個字元對應素數的乘積。

3.遍歷短字串,判斷乘積能否被短字串中的字元對應的素數整除。

4.輸出結果。

字串包含問題

字串包含問題 判斷小字串的所有字元是否大字串都有 思路一 針對小字串的每乙個字元一一與大字串的字元輪詢比較即可,很明顯時間複雜度為o n m bool compare string s1,string s2 if j s2.length return true 思路二 對兩個字串分別排序,同時依次輪...

字串包含問題

假設這有乙個各種字母組成的字串a,和另外乙個字串b,字串裡b的字母數相對少一些。什麼方法能最快的查出所有小字串b裡的字母在大字串a裡都有?比如,如果是下面兩個字串 string 1 abcdefghlmnopqrs string 2 dcgsrqpo 答案是true,所有在string2裡的字母st...

字串包含問題

兩個字串s1和s2,假設s1長度大於等於s2長度,判斷s2是否為s1的乙個子集。例如 s1 abcdefghi,s2 acefg,由於s2中的每個元素都出現在s1中,說明s1包含s2.若s2 acefgk,由於k不在s1中,因此s1不包含s2。設s1長度為m,s2長度為n 方法1 brute for...