欢迎光临散文网 会员登陆 & 注册

884. 两句话中的不常见单词

2023-03-28 09:08 作者:目标力扣Knight  | 我要投稿

884. 两句话中的不常见单词

方法一:字符串切割 + 哈希

纯模拟的思路,先将字符串切割为单词,然后将单词存入哈希表中,逐个遍历哈希表,同时判断键在另外一个哈希表的存储情况,不再则存入作为返回值的数组当中;

Python版本

C++版本

复杂度分析

  • 时间复杂度: O(C)。此题没有明确给出单词的个数,我们将字符数组转换为单词数组的时候,复杂度为O(N), 此处n 指的是字符串 s1 / s2的长度,转换后的单词的个数不确定,通常考虑极端情况,若每间隔一位制造一个空格,那么复杂度约为33,一个字母只能算作字母,最少需要两个,小于极限情况:由26个字母抽取两个组成单词且去重的个数—>26 * 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语法,对我来说新知识,而且显而易见,官方题解的作者进一步做了封装,因两个字符串均需要提取单词;

  • 而在手动实现将字符串转换为单词数组的过程中,很容易因为双指针的偏移方式导致错误,比如我出错的原因就是没有分清单个字母存入单词串的方法,究竟存储字母和指针偏移那个在前,这会导致关联问题,起始字母是否作为双指针的第二指针先行插入,这以上两个问题导致了长达30分钟的debug,需要特别注意,但两种循环嵌套剥离单词的模型是固定的,也就是双指针;


884. 两句话中的不常见单词的评论 (共 条)

分享到微博请遵守国家法律