辣条走起,每月的leetcode刷题99元奖励就靠大家啦~
前言
2018.11.30号打卡
昨天的题解
题目
每天一道leetcode890-查找和替换模式
分类:字符串
题目详述
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。
如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。
(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)
返回 words 中与给定模式匹配的单词列表。
你可以按任何顺序返回答案。
示例:
输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
输出:["mee","aqq"]
解释:
"mee" 与模式匹配,因为存在排列 。
"ccc" 与模式不匹配,因为 不是排列。
因为 a 和 b 映射到同一个字母。
题目详解
思路
因为是一一对应的关系,所以使用hashmap,依次比较abb与word中的每一个字符,比如说abb与abc,a与a对应存入hahsmap,b与b对应存入hashmap,第3对,b是key已经存入hashmap中了,读取hashmap发现value是c所以一个b对应了b和c所以匹配失败
上述情况有个漏洞就是,比如abb与ccc,a和c存入hashmap,b和c存入,然后最后一个b发现已经在hashmap中,一读取出来b对应的value值是c与对应的第三对b-c是一样的,这个时候会在上述情况成立,而把ccc也保留
如何解决,那么就是又建立一个hashmap,称为hashmap2,这个hashmap用来每次保存反向的,反向啥意思就是上述hashmap存a和c,我hashmap2存c和a,这样在下一次hashmap1要存b和c的时候成立,但是hashmap2存c-b不成立了,因为hashmap2已经存了c-a这个时候直接返回false用两个hashmap就可以解决了。
结束语
2018.11.30号打卡
领取专属 10元无门槛券
私享最新 技术干货