本文主要是介绍890. 查找和替换模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
你有一个单词列表 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
Review : 定义两个数组,一个用来存放 pattern -> word 各个字母的映射
另一个则储存 word的字母是否已经被pattern中字母映射
Code:
class Solution {public List<String> findAndReplacePattern(String[] words, String pattern) {int len = pattern.length();ArrayList<String> res = new ArrayList<>();p:for (String word : words) {int[] record = new int[123];boolean[] flag = new boolean[123];if (word.length() != len) {continue;}for (int i = 0; i < len; i++) {if (record[pattern.charAt(i)] == 0) {if (flag[word.charAt(i)]) continue p;flag[word.charAt(i)] = true;record[pattern.charAt(i)] = word.charAt(i);} else if (record[pattern.charAt(i)] != word.charAt(i)) {continue p;}}res.add(word);}return res;}
}
这篇关于890. 查找和替换模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!