兩個字串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中的每個字...