884. 兩句話中的不常見單詞

方法一:字符串切割 + 哈希
純模擬的思路,先將字符串切割為單詞,然后將單詞存入哈希表中,逐個遍歷哈希表,同時判斷鍵在另外一個哈希表的存儲情況,不再則存入作為返回值的數(shù)組當(dāng)中;
Python版本
C++版本
復(fù)雜度分析
時間復(fù)雜度: O(C)。此題沒有明確給出單詞的個數(shù),我們將字符數(shù)組轉(zhuǎn)換為單詞數(shù)組的時候,復(fù)雜度為O(N), 此處n 指的是字符串 s1 / s2的長度,轉(zhuǎn)換后的單詞的個數(shù)不確定,通??紤]極端情況,若每間隔一位制造一個空格,那么復(fù)雜度約為33,一個字母只能算作字母,最少需要兩個,小于極限情況:由26個字母抽取兩個組成單詞且去重的個數(shù)—>2
6 * 25 / 2 = 325
; 假設(shè)每個單詞都出現(xiàn)一次,那么總的復(fù)雜度為 200 + (33 + 33) * 2 = 332,因此在較小的數(shù)據(jù)集中當(dāng)作常數(shù)C;空間復(fù)雜度:O(C)。理由如上,一般遍歷次數(shù)就是空間的單位長度個數(shù);
方法二:優(yōu)化后的哈希
在A哈希表而不再B哈希表等價于,在兩個哈希表的合集中之出現(xiàn)一次,因此可以用一個哈希表來存儲兩個字符串的單詞,最后返回僅在哈希表出現(xiàn)一次的單詞即可;
Python版本
C++版本
復(fù)雜度分析
時間復(fù)雜度:O(N)。對于原字符數(shù)組轉(zhuǎn)換為單詞,復(fù)雜度不變,而對來自于兩個字符數(shù)組構(gòu)成的哈希表,由于其最大組合為
325
,而在假設(shè)兩個字符數(shù)組提取長度為2,間隔一位取空格,最終得到的單詞個數(shù)為33 * 2
,仍然小于325
的最大組合個數(shù),其次作為返回值,極限情況可以每個單詞都只出現(xiàn)一次,且兩個哈希表中的單詞均只出現(xiàn)一次且唯一,那么復(fù)雜度為200 + 33 * 2 + 33 * 2=332
。空間復(fù)雜度: O(N)。理由同上;
備注
此次在使用C++求字符串切割后的單詞,首次使用了
stringstream
語法,對我來說新知識,而且顯而易見,官方題解的作者進一步做了封裝,因兩個字符串均需要提取單詞;