private class Node {
public HashMap<Character , Node> childs; //子结点
public boolean isLeaf; //当前结点是否是完整字符串(是否是叶结点)
public Node () {
this.isLeaf = false;
this.childs = new HashMap<>();
}
}
//根结点
private Node root;
public TrieTree () {
root = new Node();
}
/** Inserts a word into the trie. */
public void insert (String str) {
insert(root , str);
}
//添加结点的过程既是添加结点的作用也是匹配前缀的过程
private void insert (Node root , String str) {
if (str == null || str.length() == 0) return;
char[] chars = str.toCharArray();
Node cur = root;
for (int i = 0 , length = chars.length ; i < length ; i++) {
//不包含当前字符加入
if (! cur.childs.containsKey(chars[i])) {
cur.childs.put(chars[i] , new Node());
}
cur = cur.childs.get(chars[i]);
}
if (!cur.isLeaf)
cur.isLeaf = true;
}
/** Returns if the word is in the trie. */
public boolean search (String str) {
return search(root , str);
}
//遍历查找是否包含字符串
private boolean search (Node root , String str) {
if (str == null || str.length() == 0) return false;
char[] chars = str.toCharArray();
Node cur = root;
for (int i = 0 , length = chars.length ; i < length ; i++) {
if (!cur.childs.containsKey(chars[i])) {
return false;
}
cur = cur.childs.get(chars[i]);
}
return cur.isLeaf;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
public boolean startsWith(String str) {
if (str == null || str.length() == 0) return false;
char[] chars = str.toCharArray();
Node cur = root;
for (int i = 0 , length = chars.length ; i < length ; i++) {
if (!cur.childs.containsKey(chars[i]))
return false;
cur = cur.childs.get(chars[i]);
}
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
719161155638)]
[外链图片转存中…(img-zrk6a8t0-1719161155639)]
[外链图片转存中…(img-I3Hxl0bL-1719161155639)]
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补