算法:短字符串中字符是否全部被包含在長字符串中
阿新 • • 發佈:2018-06-08
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; }
算法:短字符串中字符是否全部被包含在長字符串中