From d65fa266f85ec83977af2ee8b9cf5be319054000 Mon Sep 17 00:00:00 2001 From: Lei Xu Date: Tue, 6 May 2025 22:03:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AE=9E=E7=8E=B0Trie=E6=A0=91=E7=9A=84?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=92=8C=E5=89=8D=E7=BC=80=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/example/leansoftx/Trie.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/example/leansoftx/Trie.java b/src/main/java/org/example/leansoftx/Trie.java index 123e15b..c836923 100644 --- a/src/main/java/org/example/leansoftx/Trie.java +++ b/src/main/java/org/example/leansoftx/Trie.java @@ -9,6 +9,18 @@ public Trie() { this.root = new TrieNode(); } + // search a word in the trie + public boolean search(String word) { + TrieNode current = root; + for (char c : word.toCharArray()) { + if (!current.hasChild(c)) { + return false; + } + current = current.children.get(c); + } + return current.isEndOfWord; + } + public boolean insert(String word) { TrieNode current = root; for (char c : word.toCharArray()) { @@ -36,7 +48,16 @@ public List autoSuggest(String prefix) { } public List getAllWordsWithPrefix(TrieNode node, String prefix) { - return null; + List words = new ArrayList<>(); + if (node.isEndOfWord) { + words.add(prefix); + } + + for (Map.Entry entry : node.children.entrySet()) { + words.addAll(getAllWordsWithPrefix(entry.getValue(), prefix + entry.getKey())); + } + + return words; } public List getAllWords() { From aa945ac7d040ef6a6d8599e6946bf030f067d1b2 Mon Sep 17 00:00:00 2001 From: Lei Xu Date: Tue, 6 May 2025 22:41:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DLevenshtein=E8=B7=9D?= =?UTF-8?q?=E7=A6=BB=E8=AE=A1=E7=AE=97=E4=B8=AD=E7=9A=84=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/example/leansoftx/Trie.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/example/leansoftx/Trie.java b/src/main/java/org/example/leansoftx/Trie.java index c836923..965c4d1 100644 --- a/src/main/java/org/example/leansoftx/Trie.java +++ b/src/main/java/org/example/leansoftx/Trie.java @@ -113,7 +113,7 @@ public List getSpellingSuggestions(String word) { public static int levenshteinDistance(String s, String t) { int m = s.length(); int n = t.length(); - int[][] d = new int[m][n]; + int[][] d = new int[m + 1][n + 1]; if (m == 0) { return n; @@ -134,7 +134,7 @@ public static int levenshteinDistance(String s, String t) { for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { int cost = (s.charAt(i - 1) == t.charAt(j - 1)) ? 0 : 1; - d[i][j] = Math.min(Math.min(d[i][j] + 1, d[i][j] + 1), d[i][j] + cost); + d[i][j] = Math.min(Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1), d[i - 1][j - 1] + cost); } }