-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMain64.java
More file actions
59 lines (52 loc) · 1.87 KB
/
Copy pathMain64.java
File metadata and controls
59 lines (52 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package JZOfferTuJi;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Main64 {
/** Initialize your data structure here. */
// 存放字典单词
Set<String> words;
// 记录字典中所有广义邻居对应的个数
Map<String, Integer> neighborCount;
public Main64() {
words = new HashSet<>();
neighborCount = new HashMap<>();
}
// 生成一个单词所有的广义邻居
public String[] getNeighbors(String word){
// 广义邻居的个数 = 字符串的长度
String[] neighbors = new String[word.length()];
StringBuilder str = new StringBuilder(word);
// 修改字符串中的各位上的字符来生成广义邻居
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
str.setCharAt(i, '*');
neighbors[i] = str.toString();
str.setCharAt(i, c);
}
return neighbors;
}
// 构建字典
public void buildDict(String[] dictionary) {
// 统计字典中所有单词的广义邻居数
for(String word : dictionary){
// 将字典单词加入哈希表中,方便后面查验插入的字符是否已经在单词表中
words.add(word);
for(String neighbor : getNeighbors(word)){
neighborCount.put(neighbor, neighborCount.getOrDefault(neighbor, 0) + 1);
}
}
}
// 在字典中查找是否存在广义邻居
public boolean search(String searchWord) {
// 查找所有广义邻居
for(String neighbor : getNeighbors(searchWord)){
int neighborNum = neighborCount.getOrDefault(neighbor, 0);
if(neighborNum > 1 || neighborNum == 1 && !words.contains(searchWord)){
return true;
}
}
return false;
}
}