每天一道leetcode890-查找和替换模式

辣条走起,每月的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号打卡

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181130G1P3L800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券