判断一个字符串的所有字符是否都在另一个字符串中
生活随笔
收集整理的這篇文章主要介紹了
判断一个字符串的所有字符是否都在另一个字符串中
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網上流傳了一個故事,說是在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) {int strmap = 0;const char * pstr = str1;while(*pstr != '\0'){strmap |= ( 1 << (*pstr - 'a'));pstr++;}pstr = str2;bool iscontained = true;while(*pstr != '\0'){if((strmap & (1 << (*pstr - 'a'))) == 0){iscontained = false;break;}pstr++;}return iscontained;}總結
以上是生活随笔為你收集整理的判断一个字符串的所有字符是否都在另一个字符串中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux makefile中的= :=
- 下一篇: [搜索]Trie树的一种实现