884. 两句话中的不常见单词
2023-03-28 09:08 作者:目标力扣Knight | 我要投稿

方法一:字符串切割 + 哈希
纯模拟的思路,先将字符串切割为单词,然后将单词存入哈希表中,逐个遍历哈希表,同时判断键在另外一个哈希表的存储情况,不再则存入作为返回值的数组当中;
Python版本
C++版本
复杂度分析
时间复杂度: O(C)。此题没有明确给出单词的个数,我们将字符数组转换为单词数组的时候,复杂度为O(N), 此处n 指的是字符串 s1 / s2的长度,转换后的单词的个数不确定,通常考虑极端情况,若每间隔一位制造一个空格,那么复杂度约为33,一个字母只能算作字母,最少需要两个,小于极限情况:由26个字母抽取两个组成单词且去重的个数—>2
6 * 25 / 2 = 325
; 假设每个单词都出现一次,那么总的复杂度为 200 + (33 + 33) * 2 = 332,因此在较小的数据集中当作常数C;空间复杂度:O(C)。理由如上,一般遍历次数就是空间的单位长度个数;
方法二:优化后的哈希
在A哈希表而不再B哈希表等价于,在两个哈希表的合集中之出现一次,因此可以用一个哈希表来存储两个字符串的单词,最后返回仅在哈希表出现一次的单词即可;
Python版本
C++版本
复杂度分析
时间复杂度:O(N)。对于原字符数组转换为单词,复杂度不变,而对来自于两个字符数组构成的哈希表,由于其最大组合为
325
,而在假设两个字符数组提取长度为2,间隔一位取空格,最终得到的单词个数为33 * 2
,仍然小于325
的最大组合个数,其次作为返回值,极限情况可以每个单词都只出现一次,且两个哈希表中的单词均只出现一次且唯一,那么复杂度为200 + 33 * 2 + 33 * 2=332
。空间复杂度: O(N)。理由同上;
备注
此次在使用C++求字符串切割后的单词,首次使用了
stringstream
语法,对我来说新知识,而且显而易见,官方题解的作者进一步做了封装,因两个字符串均需要提取单词;