290 题

来源:4-3 set和map不同底层实现的区别

我是笨笨蛋

2020-03-01

图片描述 老师,这段代码中这两个for循环的作用是什么。我只知道 第一个for循环中map1[pattern[i]]=words[i];的作用是建立 pattern->str 的关系。

写回答

1回答

liuyubobobo

2020-03-02

map1[pattern[i]] = words[i] 是建立 pattern 到 words 的关系,

即 a 对应 dog;b 对应 cat;


map2[words[i]] = pattern[i] 是建立 words 到 pattern 的关系,

即 dog 对应 a;cat 对应 b;


之后的 for 循环就是遍历一遍,确认第 i 个 words 确实是和 pattern 第 i 个字符对应的;

并且 pattern 第 i 个字符也确实是和第 i 个 words 对应的。

如果有一个不对应,就返回 false。


这里有一个有意思的问题,就是为什么要正着检查一遍,再反着检查一遍?


我建议,把这两个检查的其中一个删掉,然后提交给 Leetcode,看结果是否正确?如果不正确,在什么测试用例上出错了?


为了帮你节省时间,我直接把测试用例给你:

如果去掉 map1 的测试,只留 map2 的测试,在下面的测试用例会出错,答案应该是 false,返回了 true:

//img.mukewang.com/szimg/5e5c40af094ead6f12880468.jpg


如果去掉 map2 的测试,只留 map1 的测试,在下面的测试用例会出错,答案应该是 false,返回了 true:

//img1.sycdn.imooc.com/szimg/5e5c40f209cb1f7512840482.jpg


具体调试一下,用单步跟踪的方式再理解一下,为什么只有一个测试,在上述的 case 下会出错?进步就发生在这个过程中哦。


继续加油!:)

1
1
我是笨笨蛋
谢谢老师。经过调试我已经理解了。之前认为相同值的Key是可以重复插入的,经过调试后明白了相同值的Key只需要更新对应的Value。
2020-03-02
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程