網上流傳了乙個故事,說是在google面試的故事,故事中說最後一道面試題就是假設有兩個字串,乙個長一些(字串1),乙個短一些(字串2),如何判斷這個短字串中的每個字元是否都在這個長字串中。假設每個字串都是由26個小寫字母組成的。
最後這個大牛提到了用乙個素數代表乙個字母,把字串1的字母的積(當然會很大)算出來,然後除以字串2的每個字元代表的素數。如果每個字元代表的素數都能被整除,說明字串2中的每個字元都在字串1中。時間複雜度為o(n+m)
這確實是乙個巧妙的方法,不過實現起來卻不是很容易。這裡針對這個特殊的要求,可以用位圖或者hash的思路來解決。
無論是字串1還是字串2,都是由【a-z】字母組成的,所以最多只有26個字母,所以只要乙個整數(32位)就可以表示字串所表示的字母,假設這個字母出現,則對應的位置1,那麼就算26個字母都出現了,也只需要26位置1.則該思路的c++實現**如下:
bool is_contained(const char* str1,const char* str2)
pstr = str2;
bool iscontained = true;
while(*pstr != '\0')
pstr++;
}return iscontained;
}
SQL 判斷乙個字串是否在另外乙個字串中
eg str1 admin str2 1234,123admin,xcxx 比較str1是否在str2中 用常用的charindex,返回肯定是有值的,這裡自己動手寫乙個方法 檢查乙個字串是否在另外乙個字串中數,另外乙個字串元素用,隔開 create function dbo checkstrina...
判斷乙個字串是否在另乙個字串中
方法一 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...
判斷乙個字串是否為另外乙個字串旋轉之後的字串
例如 給定s1 aabcd和s2 bcdaa,返回1 給定s1 abcd和s2 acbd,返回0.aabcd左旋乙個字元得到abcda aabcd右旋乙個字元得到daabc 思路 把aabcd複製兩遍,看結果是否在aabcdaabcd 中 左旋和右旋的結果都在aabcdaabcd 中 include...