当前位置:网站首页>LeetCode 890. 查找和替换模式(模拟+双哈希表)
LeetCode 890. 查找和替换模式(模拟+双哈希表)
2022-06-12 11:46:00 【xylitolz】
题目

解法:模拟+双哈希表
**整体思路:**遍历words,逐个判断每个单词是否与pattern匹配
在逐个判断过程中,使用双map构造从字母到字母的映射,即 word 的每个字母需要映射到 pattern 的对应字母,并且 pattern 的每个字母也需要映射到 word 的对应字母。
class Solution {
public List<String> findAndReplacePattern(String[] words, String pattern) {
List<String> res = new ArrayList<>();
int n = words.length;
char[] pcs = pattern.toCharArray();
for (int i = 0; i < n; i++) {
char[] cs = words[i].toCharArray();
if (cs.length != pcs.length) {
continue ;
}
// pattern -> word
Map<Character, Character> p2wMap = new HashMap<>();
// word -> pattern
Map<Character, Character> w2pMap = new HashMap<>();
boolean flag = true;
for (int j = 0; j < cs.length; j++) {
char a = pcs[j], b = cs[j];
if (p2wMap.containsKey(a)) {
if (p2wMap.get(a) != b ) {
flag = false;
break;
}
} else {
p2wMap.put(a, b);
}
if (w2pMap.containsKey(b)) {
if (w2pMap.get(b) != a) {
flag = false;
break;
}
} else {
w2pMap.put(b, a);
}
}
if (flag) {
res.add(words[i]);
}
}
return res;
}
}
时间复杂度:
O(nm),其中n是数组words的长度,m是pattern的长度。对于每个word需要O(m)的时间检查其是否与pattern匹配。空间复杂度:
O(m)。哈希表需要O(m)的空间
也可以利用字符集大小只有 26,进而使用数组充当哈希表,使用 map 记录具体的映射关系,使用 vis 记录哪些字符已被映射
class Solution {
public List<String> findAndReplacePattern(String[] ws, String pe) {
List<String> ans = new ArrayList<>();
int[] map = new int[26], vis = new int[26];
for (String s : ws) {
Arrays.fill(map, -1);
Arrays.fill(vis, 0);
boolean ok = true;
for (int i = 0; i < pe.length() && ok; i++) {
int c1 = s.charAt(i) - 'a', c2 = pe.charAt(i) - 'a';
if (map[c1] == -1 && vis[c2] == 0) {
map[c1] = c2; vis[c2] = 1;
} else if (map[c1] != c2) {
ok = false;
}
}
if (ok) {
ans.add(s);
}
}
return ans;
}
}
Reference
边栏推荐
猜你喜欢

Socket programming UDP

Les humains veulent de l'argent, du pouvoir, de la beauté, de l'immortalité, du bonheur... Mais les tortues ne veulent être qu'une tortue.
![[Blue Bridge Cup SCM 11th National race]](/img/da/3c8a9efd5b28f67816f239531a0339.png)
[Blue Bridge Cup SCM 11th National race]

6.6 Convolution de séparation

Windows10安装mysql-8.0.28-winx64

TinyMCE realizes automatic uploading of pasted pictures

Logrotate log rotation method create and copyruncate principles

Basic principle of Doppler effect

Doris records service interface calls

【深度学习基础】反向传播法(1)
随机推荐
Arm cross compilation chain download address
QT based travel query and simulation system
LeetCode 1037. 有效的回旋镖(向量叉乘)
K59. Chapter 2 installing kubernetes V1.23 based on binary packages -- cluster deployment
TinyMCE series (II) TinyMCE plug-in development
Lambda and filter, index of list and numpy array, as well as various distance metrics, concatenated array and distinction between axis=0 and axis=1
Deep learning and CV tutorial (14) | image segmentation (FCN, segnet, u-net, pspnet, deeplab, refinenet)
Problems in cross validation code of 10% discount
【QNX Hypervisor 2.2 用户手册】4 构建QNX Hypervisor系统
A.前缀极差
一个人必须不停地写作,才能不被茫茫人海淹没。
[Blue Bridge Cup SCM 11th National race]
[database] SQLite version upgrade and downgrade
5G NR協議學習--TS38.211下行通道
[the 11th national competition of Blue Bridge Cup single chip microcomputer]
視頻分類的類間和類內關系——正則化
ARM指令集之杂类指令
Compiling Draco library on Windows platform
Socket Programming TCP
manuscript手稿格式准备