題目描述:
假設這有乙個各種字母組成的字串a,和另外乙個字串b,字串裡b的字母數相對少一些。什麼方法能最快的查出所有小字串b裡的字母在大字串a裡都有?
比如,如果是下面兩個字串:
string 1: abcdefghlmnopqrs
string 2: dcgsrqpo
答案是true,所有在string2裡的字母string1也都有。
思路總結如下:
1.定義最小的26個素數分別與字元'a'到'z'對應。
2.遍歷長字串,求得每個字元對應素數的乘積。
3.遍歷短字串,判斷乘積能否被短字串中的字元對應的素數整除。
4.輸出結果。
至此,如上所述,上述演算法的時間複雜度為o(m+n),時間複雜度最好的情況為o(n)(
遍歷短的字串的第乙個數,與長字串素數的乘積相除,即出現餘數,便可退出程式,返回false
),n為長字串的長度,空間複雜度為o(1)。如你所見,我們已經優化到了最好的程度。
**:
public static void function()
;
string strone = "abcdefghlmnopqrs";
string strtwo = "dcgsrqpom";
long long product = 1; //大整數除法的**,下頭給出。
// 遍歷長字串,得到每個字元對應素數的乘積
for (int i = 0; i < strone.length(); i++)
// 遍歷短字串
for (int j = 0; j < strtwo.length(); j++)
// 如果積能整除短字串中所有字元則輸出"true",否則輸出"false"。
判斷兩個字串是否為變形詞
例如 str1 123 str2 132 true str1 123 str2 1332 false 思路 1.如果其中乙個字串為空或者兩個字串長度不相等,返回 false 2.遍歷 str1,記錄每個字元出現的次數 1.建立乙個新的陣列 arr 初始化都為 0 2.遍歷 str1,利用字元的 as...
判斷兩個字串是否為變形詞
判斷兩個字串是否為變形詞 給定兩個字串str1和str2,如果str1和str2 現的字元種類出現的一樣且每種字元出現的次數也一樣,那麼str1和str2互為變形詞。請判斷str1和str2是否為變形詞。輸入描述 輸入包括3行,第一行包含兩個整數n,m 1 n,m 105 1 leq n,m leq...
判斷兩個字串是否相同
data segment mess1 db computer software mess2 db computer software data ends code segment assume ds data,cs code start mov ax,data mov ds,ax mov es,ax...