問題描述:
假設這有乙個各種字母組成的字串,假設這還有另外乙個字串,而且這個字串裡的字母數相對少一些。從演算法是講,什麼方法能最快的查出所有小字串裡的字母在大字串裡都有?
比如,如果是下面兩個字串:
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...