我們在參加筆試或者寫**的時候總會與字串打交道,今天主要想說的是如何解決字串包含的問題。
問題是,給你乙個字串然後讓你迴圈移位能否得到乙個給定的字串,比如給你abcde 能否將其進行移位得到cdea,這樣的問題。
遇到這樣的 問題我們可能第一件事就是對其進行迴圈移位,這個方法是沒有問題的,但是我們想想如果字串很長很長,那麼我們的效率是不是會很高呢?時間複雜度應該為字串的長度。這樣肯定效率不是很高的。下面我們來進行分析。
abcde進行移位得到的結果為:
abcde ->bcdea -> cdeab -> deabc -> eabcd -> abcde
我們這樣來看,
bcdea = abcde abcde 去掉前面的a字母和後面的bcde字母
cdeab = abcde abcde 去掉前面的ab字母和後面的cde字母
同理。。。。。。。。
我們發現不管怎麼旋轉abcde都是可以由abcdeabcde擷取下來得到的。
所以我們的問題也就解決了,我們把原來的字串進行相疊加,也就是將abcde疊加為abcdeabcde,這樣我們在判斷移位得到子串的時候就直接進行判斷是否包含就可以知道能不能從原來的字串移位得到了。
所以這樣的乙個方法就使我們的程式變得非常的簡單了。
下面是乙個簡單的例子來說明下:
package teststring;
public class teststring
public static void main(string args)
}
字串包含問題
字串包含問題 判斷小字串的所有字元是否大字串都有 思路一 針對小字串的每乙個字元一一與大字串的字元輪詢比較即可,很明顯時間複雜度為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...