题目要求
如果有一个单词列表words,和一个模式pattern
- 如果存在字母的排列p,使得将模式中的每个字母x替换为p(x)之后,
- 我们就得到了所需单词,那么单词与模式是匹配的。返回words中与给定模式匹配的单词列表。
- 示例:
- 输入:words=[“abc”,“deq”,“mee”,“aqq”,“dkd”,“ccc”],pattern = “abb”
- 输出:[“mee”,“aqq”]
核心思想
利用HashMap,将pattern的字符用作key,将两个单词中的元素一一对应,进行匹配。
完整代码如下
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 查找和替换模式
* 如果有一个单词列表words,和一个模式pattern
* 如果存在字母的排列p,使得将模式中的每个字母x替换为p(x)之后,
* 我们就得到了所需单词,那么单词与模式是匹配的。返回words中与给定模式匹配的单词列表。
* 示例:
* 输入:words=[\"abc\",\"deq\",\"mee\",\"aqq\",\"dkd\",\"ccc\"],pattern = \"abb\"
* 输出:[\"mee\",\"aqq\"]
*
*/
public class Solution {
public static List<String> findAndReplacePattern(String[] words, String pattern) {
List<String> list = new ArrayList<>();
for(int i = 0; i < words.length; i++) {
//先判断长度,第一步筛选
if(words[i].length() != pattern.length()) {
continue;
}
Map<Character,Character> hashmap = new HashMap<>();
boolean is = true;
for(int j = 0; j < words[j].length(); j++) {
if(!hashmap.containsKey(pattern.charAt(j))) {
//这里还要判断一下words,因为j在两个单词中的变化是同步的,两个单词必须都符合未出现过的条件,以免遗漏了违规单词
if(!hashmap.containsValue(words[i].charAt(j))) {
hashmap.put(pattern.charAt(j),words[i].charAt(j));
} else {
is = false;
break;
}
} else {
if(hashmap.get(pattern.charAt(j)) != words[i].charAt(j)) {
is = false;
break;
}
}
}
if(is == true) {
list.add(words[i]);
}
}
return list;
}
public static void main(String[] args) {
String[] words = {\"abc\",\"deq\",\"mee\",\"aqq\",\"dkd\",\"ccc\"};
String pattern = \"abb\";
System.out.println(Solution.findAndReplacePattern(words, pattern));
}
}
继续阅读与本文标签相同的文章
上一篇 :
转转二手手机质检成为行业的催化剂
下一篇 :
4K花园:50M是5G手机超高清视频最佳观赏码率
-
阿里云开发者社区问答栏目提问规范
2026-05-18栏目: 教程
-
小伙上演“无人驾驶”手舞足蹈,女网友拍视频发朋友圈结果“悲剧了”……
2026-05-18栏目: 教程
-
迎来“无后门协议”!持续压制无效?5G建设选择在于技术问题
2026-05-18栏目: 教程
-
Pepper Metrics - Spring/Spring Boot应用性能监控利器
2026-05-18栏目: 教程
-
ZKEYS:数字化时代,IDC云化解决方案的探索实践
2026-05-18栏目: 教程
