假設這有乙個各種字母組成的字串,假設這還有另外乙個字串,而且這個字串裡的字母數相對少一些。從演算法是講,什麼方法能最快的查出所有小字串裡的字母在大字串裡都有?
解答:(1)把其中的每個字母都放入乙個hashtable裡(成本是o(n)或16次操作)。然後輪詢第二個字串,在hashtable裡查詢每個字母,看能否找到。如果找不到,說明沒有匹配成功。
(2) 假設我們有乙個一定個數的字母組成字串 —— 我給每個字母分配乙個素數,從2開始,往後類推。這樣a將會是2,b將會是3,c將會是5,等等。現在我遍歷第乙個字串,把每個字母代表的素數相乘。你最 終會得到乙個很大的整數,對吧?然後 —— 輪詢第二個字串,用每個字母除它。如果除的結果有餘數,這說明有不匹配的字母。如果整個過程中沒有餘數,你應該知道它是第乙個字串恰好的子集了。
(3)共有26個英文本母,如果在字串中該字母出現,就為1,否則為0,則用兩個整型數( int)可以表示 這兩個字串。
假設 int a,b;
c=a|b(按位或)
d=a^c(按位異或)
如果d為0那麼說明b中的字串在a中都出現,如果d不為1,那麼說明b中有a中未出現的字串。
**如下:
#include
#include
int convert(
char *str)
int main(
int argc,
char*argv)
str1=argv[
1];str2=argv[
2];a=convert(str1);
b=convert(str2);
printf(
"a=0x%x b=0x%x\n
",a,b);
c=a|b;
printf(
"c=0x%x\n
",c);
d=a^c;
printf(
"d=0x%x\n
",d);
d==0?printf(
"%s all in %s\n
",str2,str1):printf(
"%s not all in %s\n
",str2,str1);
return
0; }
判斷乙個字串是否在另乙個字串中
方法一 string str1 nihaoksdoksad string str2 ok int total 0 for string tmp str1 tmp null tmp.length str2.length tmp tmp.substring 1 system.out.println st...
判斷乙個字串是否在另乙個字串中
find in set str,str1 判定str是否在str1中有,如果有,則返回其在str1中的位置,如果沒有,返回0 eg select find in set 13教 瀏陽基地,耕耘基地,文淵館,13教,測試基地,耕耘基地 返回4 這個函式有很大的侷限性,他只能判別是否存在於第二個字串中以...
判斷乙個字串的所有字元是否都在另乙個字串中
網上流傳了乙個故事,說是在google面試的故事,故事中說最後一道面試題就是假設有兩個字串,乙個長一些 字串1 乙個短一些 字串2 如何判斷這個短字串中的每個字元是否都在這個長字串中。假設每個字串都是由26個小寫字母組成的。最後這個大牛提到了用乙個素數代表乙個字母,把字串1的字母的積 當然會很大 算...