1. 题目

你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。

如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。

(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)

返回 words 中与给定模式匹配的单词列表。

你可以按任何顺序返回答案。

示例:
输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
输出:["mee","aqq"]
解释:
"mee" 与模式匹配,因为存在排列 {a -> m, b -> e, ...}。
"ccc" 与模式不匹配,因为 {a -> c, b -> c, ...} 不是排列。
因为 a 和 b 映射到同一个字母。提示:
1 <= words.length <= 50
1 <= pattern.length = words[i].length <= 20

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-and-replace-pattern
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 双向哈希表 解题

  • 采用两个哈希表,分别记录两个对比字符串中的字符,及其字符差值
class Solution {public:vector<string> findAndReplacePattern(vector<string>& words, string pattern) {unordered_map<char,int> m;//pattern字符,pattern与word的字符差unordered_map<char,int> n;//word字符,pattern与word的字符差vector<string> ans;int i;bool good;for(string &word : words){if(word.size() != pattern.size())continue;m.clear();n.clear();good = true;for(i = 0; i < pattern.size(); ++i){if(m.find(pattern[i]) == m.end())//没找到,存入字符差值m[pattern[i]] = word[i]-pattern[i];else{if(m[pattern[i]] != word[i]-pattern[i]){    //找到了,之前存过,跟之前的差值一致吗?不一致,错good = false;break;}}if(n.find(word[i]) == n.end())//没找到,存入字符差值n[word[i]] = word[i]-pattern[i];else{if(n[word[i]] != word[i]-pattern[i]){ //找到了,之前存过,跟之前的差值一致吗?不一致,错good = false;break;}}}if(good)ans.push_back(word);}return ans;}
};

LeetCode 890. 查找和替换模式(哈希表)相关推荐

  1. 890.查找和替换模式

    890.查找和替换模式 你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配. 如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) ...

  2. LeetCode 1002. 查找常用字符(哈希)

    1. 题目 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表.例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包 ...

  3. e - 数据结构实验之查找五:平方之哈希表_leetcode算法之哈希表

    今天该来盘一盘 哈希表 这类题目 分类别解析leetcode上的一些相关的例题路,代码采用C++与python实现. 哈希表 哈希表是一种很有用的数据结构, 其作用主要是以空间换时间, 在c++中主要 ...

  4. 【Leetcode 专题五】数组和哈希表

    目录 一.前言 二.解题思路和代码整理 2.1.数组重建 Leetcode283. 移动零 Leetcode27. 移除元素 Leetcode26. 删除有序数组中的重复项 2.2.数组双指针 Lee ...

  5. 散列查找 散列表(哈希表)

    哈希表的平均查找长度是()的函数. A.哈希表的长度 B.哈希表的装填因子 C.哈希函数 D.表中元素的多少 装填因子 = 关键字个数 / 表长 符号表:是 "名字(Name)–属性(Att ...

  6. 查找-------(HashCode)哈希表的原理

    这段时间 在 准备软件设计师考试    目的是想复习一下  自己以前没怎么学的知识    在这个过程中  有了很大的收获  对以前不太懂得东西  在复习的过程中  有了很大程度的提高 比如在复习 程序 ...

  7. 【LeetCode刷题记录】LeetCode经典题目数组求和及哈希表的使用!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 LeetCode题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整 ...

  8. e - 数据结构实验之查找五:平方之哈希表_面试中常被问到的Hash表,你了解吗

    #新人扶持计划# Hash表在面试中经常被问到,今天我们来了解下. Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组.链表以及二叉排序树等相比较有很明显的区别,它能够 ...

  9. Leetcode 146. LRU缓存机制【哈希表 [哈希表存储每个元素在双向链表中的指针]+双向链表】

    文章目录 问题描述 解题报告 实验代码 参考资料 问题描述 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . ...

最新文章

  1. Android 全屏显示
  2. Google 修补多项 Android 高危漏洞
  3. php将上传的图片转为base64,html5实现把上传的图片转成base64编码在显示(代码实例)...
  4. 处理自己的数据集_手写代码实现KDD CUP99数据集的数据归一化处理
  5. ShellAPI 调用搜索引擎
  6. Java中如何实现代理机制(JDK、CGLIB)
  7. 20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK
  8. C--计算求1+2!+3!+.......+n!
  9. iOS 绝对值方法
  10. Shell脚本-tr 将大写字母变为小写
  11. Nas初体验(黑群晖实战)
  12. 基于SSM的社区宠物信息管理系统
  13. 继承几近失传的经典吟诵-余觉中
  14. 算法设计与分析——图像的压缩
  15. PR片头片尾模板 蝴蝶飞舞动态粒子爆炸效果logo展示pr视频模板
  16. 135编辑器代码是html吗,不会代码,你也能做背景样式!!!
  17. [技术讨论]网络软件开发的bug分析与公司开发管理问题之阿里篇
  18. RTF转换为HTML格式(java)
  19. 经典影视剧《大宋提刑官》——老剧重看,再添心得
  20. 摄影入门-之一-什么是单反

热门文章

  1. 如何确定VS编译器版本--_MSC_VER || #if _MSC_VER 1000 #pragma once #endif
  2. 纽曼皮尔逊准则Matlab实现,纽曼-皮尔逊准则,Neyman Pearson Criterion,在线英语词典,英文翻译,专业英语...
  3. docker选择安装位置_自定义WSL的安装位置,别再装到C盘啦
  4. [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项
  5. CodeForces 903D Almost Difference
  6. springaop----springaop的使用(一)
  7. Java的几个同步辅助类
  8. [objective-c] 08 - 内存管理
  9. SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列
  10. 天气预报Dom解析(转)