描述
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。
如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。
(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)
返回 words 中与给定模式匹配的单词列表。
你可以按任何顺序返回答案。
在线评测地址:领扣题库官网
样例1 输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb" 输出:["aqq","mee"] "mee" 与模式匹配,因为存在排列 {a - m, b - e, ...}。 "ccc" 与模式不匹配,因为 {a - c, b - c, ...} 不是排列。 因为 a 和 b 映射到同一个字母。
样例2 输入: words = ["a","b","c"], pattern = "a" 输出: ["a","b","c"] 所有的字符串都匹配。
解题思路
遍历words,逐个匹配是否满足pattern,在匹配时,借助HashMap建立字符映射关系,条件是:每个字母映射到另一个字母中,没有两个字母映射到同一个字母。
源代码
public class Solution { * @param words: word list * @param pattern: pattern string * @return: list of matching words public List String findAndReplacePattern(String[] words, String pattern) { // Write your code here. int[] p = F(pattern); List String res = new ArrayList String for (String w : words) if (Arrays.equals(F(w), p)) res.add(w); return res; public int[] F(String w) { HashMap Character, Integer m = new HashMap (); int n = w.length(); int[] res = new int[n]; for (int i = 0; i i++) { m.putIfAbsent(w.charAt(i), m.size()); res[i] = m.get(w.charAt(i)); return res; }
更多题解参考:九章官网solution
【51CTO.com快译】还记得多年前有关Android与iOS孰优孰劣的辩论吗?如今,Kotlin...
大数据本身是一种现象而不是一种技术。大数据技术是一系列使用非传统的工具来对...
虚拟主机 内存1g什么意思?虚拟主机的1G其实指的是放置 网页空间 的内存大小,它...
最近有朋友问我,什么是IaaS?什么是PaaS?什么是SaaS?他们又有什么分别?其实,云...
我们都知道开发过程中应该编写单元测试,实际上我们中的许多人都这样做。对于生...
红红火火的牛年春节期间,全国民众逛吃逛吃模式持续升温,美食、新衣、美妆、珠...
TOP云 (west.cn)1月20日消息,近日海外知名投资大佬Mike Mann发推称,将英文单...
简直就像过年一样!这是众多游客及旅游业者对今年国庆中秋假期的直观感受。 来自...
2020年,全球以一种独特的方式掀开了崭新一幕,整个世界由于受新冠疫情的影响,...
功能介绍 删除一个指定弹性伸缩组。 force_delete属性表示如果伸缩组存在ECS实例...