1. 程式人生 > >算法:短字符串中字符是否全部被包含在長字符串中

算法:短字符串中字符是否全部被包含在長字符串中

In 遍歷 pan hash gone char col str int

算法題目:有兩個字符串由不同的字母組成,一長一短,長的為A短的為B。設計一個算法,如果所有在B中出現的字符都在A中出現,則返回true,否則返回false。

如下字符串:

字符串A: abddfdioegdddffsfagj

字符串B: dofsjadg

字符串B中每個字符都在A中出現,返回true。

如下字符串:

字符串A: aaaabbbbbbdddddd

字符串B: acc

字符串B中有字符沒在A中出現,返回false。

答案1:對字符串B中的每個字母在A中都遍歷一遍。這個答案很爛,其時間復雜度為O(n*m)

答案2:設一個哈希表,對字符串A的字符遍歷,將每個字符對應的哈希表中的值設為1。然後對B中的字符進行遍歷,如果所有字符對應的hash值都為1,則返回true,否則返回false。

這個答案的時間復雜度是O(m+n),應該是大多數面試者想要的答案,相信大多數人也能想到。

int strInclude(const char *longOne, const char *shortOne)  
{  
    int i, allChar[256] = { 0 };  
    int longLen = strlen(longOne);  
    int shortLen = strlen(shortOne);  
  
    for(i = 0; i < longLen; i++)  
        allChar[longOne[i]] = 1;  
  
    
for(i = 0; i < shortLen; i++) if(allChar[shortOne[i]] != 1) break; return i == shortLen ? 1 : 0; }

算法:短字符串中字符是否全部被包含在長字符串中