字串包含問題

2021-06-28 09:44:16 字數 1172 閱讀 1808

兩個字串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-force 兩個for loop,複雜度為o(m*n)

public static boolean compare(string s1, string s2)

j++;

} exch(array,lo,i);

return i;

}private static void exch(string array, int i, int j)

public static void quicksort(string array)

private static void quicksort(string array, int lo, int hi)

在執行下面的**前,要對s1和s2用quicksort重新排好序。

public static boolean compare(string s1, string s2)

string b = new string[array.length];

//初始化輔助陣列

for (int i = 0; i=0; i--)

return b;

}

之後如同方法2,呼叫compare即可

方法4用hashtable,將短的字串的每個元素儲存在一張hash table中,o(n)。然後對長字串進行遍歷,看hash(s1[i])對映到的slot是否已經有元素了。如果全部都有,則說明s1包含s2,如果有乙個slot是空的,則說明s1不包含s2. 複雜度o(m)。所以總的複雜度是線性的。o(m+n)

public static boolean compare(string s1, string s2)

int num = 0;

for(int i = 0; ifor(int i = 0; iif(num==0) return true;

else return false;

}

字串包含問題

字串包含問題 判斷小字串的所有字元是否大字串都有 思路一 針對小字串的每乙個字元一一與大字串的字元輪詢比較即可,很明顯時間複雜度為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...

字串包含問題

1 問題描述 存在字串1和字串2,假設字串2相對較短,如何快速地判定字串2中的字元都存在於字串1裡 假定字串只包含字母 2 舉例 字串1為abcdefghijk,字串2為abcde,則字串1包含字串2,因為字串2中包含的字母在字串1中也都有。3 解決方案 思路一 最直接的思路就是針對字串2中的每個字...