Skip to content

Commit 2d0993f

Browse files
committed
Implement Trie
1 parent 89a825b commit 2d0993f

File tree

7 files changed

+39
-69
lines changed

7 files changed

+39
-69
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,9 @@
4646
15. [Game of Life](https://leetcode.com/problems/game-of-life/)[solution](src/main/kotlin/ru/romanow/medium/GameOfLife.kt), [test](src/test/kotlin/ru/romanow/medium/GameOfLifeTest.kt)
4747
16. [Delete Node in a Linked List](https://leetcode.com/problems/delete-node-in-a-linked-list/)[solution](src/main/kotlin/ru/romanow/medium/DeleteNodeInALinkedList.kt), [test](src/test/kotlin/ru/romanow/medium/DeleteNodeInALinkedListTest.kt)
4848
17. [Longest Common Subsequence](https://leetcode.com/problems/longest-common-subsequence/)[solution](src/main/kotlin/ru/romanow/medium/LongestCommonSubsequence.kt), [test](src/test/kotlin/ru/romanow/medium/LongestCommonSubsequenceTest.kt)
49-
18. [Delete Node in a Binary Search Tree](https://leetcode.com/problems/delete-node-in-a-bst/)[solution](src/main/kotlin/ru/romanow/medium/DeleteNodeInABalancedSearchTree.kt), [test](src/test/kotlin/ru/romanow/medium/DeleteNodeInABalancedSearchTreeTest.kt)
50-
19. [Decode String](https://leetcode.com/problems/decode-string/)[solution](src/main/kotlin/ru/romanow/medium/DecodeString.kt), [test](src/test/kotlin/ru/romanow/medium/DecodeStringTest.kt)
51-
20. [Determine if Two Strings Are Close](https://leetcode.com/problems/determine-if-two-strings-are-close/)[solution](src/main/kotlin/ru/romanow/medium/DetermineIfTwoStringsAreClose.kt), [test](src/test/kotlin/ru/romanow/medium/DetermineIfTwoStringsAreCloseTest.kt)
52-
21. [Removing Stars From a String](https://leetcode.com/problems/removing-stars-from-a-string/)[solution](src/main/kotlin/ru/romanow/medium/RemovingStarsFromAString.kt), [test](src/test/kotlin/ru/romanow/medium/RemovingStarsFromAStringTest.kt)
49+
18. [Decode String](https://leetcode.com/problems/decode-string/)[solution](src/main/kotlin/ru/romanow/medium/DecodeString.kt), [test](src/test/kotlin/ru/romanow/medium/DecodeStringTest.kt)
50+
19. [Determine if Two Strings Are Close](https://leetcode.com/problems/determine-if-two-strings-are-close/)[solution](src/main/kotlin/ru/romanow/medium/DetermineIfTwoStringsAreClose.kt), [test](src/test/kotlin/ru/romanow/medium/DetermineIfTwoStringsAreCloseTest.kt)
51+
20. [Removing Stars From a String](https://leetcode.com/problems/removing-stars-from-a-string/)[solution](src/main/kotlin/ru/romanow/medium/RemovingStarsFromAString.kt), [test](src/test/kotlin/ru/romanow/medium/RemovingStarsFromAStringTest.kt)
5352

5453
## Hard level
5554

src/main/kotlin/ru/romanow/algorithms/BinarySearchTree.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ class BinarySearchTree {
88
fun get(key: Int): Int? {
99
var current = root
1010
while (current != null) {
11-
current = when {
12-
key < current.key -> current.left
13-
key > current.key -> current.right
14-
else -> return current.value
15-
}
11+
current =
12+
when {
13+
key < current.key -> current.left
14+
key > current.key -> current.right
15+
else -> return current.value
16+
}
1617
}
1718
return null
1819
}

src/main/kotlin/ru/romanow/algorithms/RedBlackTree.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ class RedBlackTree {
88
fun get(key: Int): Int? {
99
var current = root
1010
while (current != null) {
11-
current = when {
12-
key < current.key -> current.left
13-
key > current.key -> current.right
14-
else -> return current.value
15-
}
11+
current =
12+
when {
13+
key < current.key -> current.left
14+
key > current.key -> current.right
15+
else -> return current.value
16+
}
1617
}
1718
return null
1819
}
@@ -24,5 +25,4 @@ class RedBlackTree {
2425
override var left: TreeNode?,
2526
override var right: TreeNode?
2627
) : TNode<TreeNode>
27-
2828
}

src/main/kotlin/ru/romanow/medium/DeleteNodeInABalancedSearchTree.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/main/kotlin/ru/romanow/medium/PrefixTree.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,34 @@ package ru.romanow.medium
1414
* [https://leetcode.com/problems/implement-trie-prefix-tree/](https://leetcode.com/problems/implement-trie-prefix-tree/)
1515
*/
1616
class PrefixTree {
17+
private val root = TrieNode()
18+
1719
fun insert(word: String) {
20+
var node = root
21+
for (chr in word) {
22+
node = node.children.getOrPut(chr) { TrieNode() }
23+
}
24+
node.isEndOfWord = true
1825
}
1926

2027
fun search(word: String): Boolean {
21-
return false
28+
return find(word)?.isEndOfWord == true
2229
}
2330

2431
fun startsWith(prefix: String): Boolean {
25-
return false
32+
return find(prefix) != null
33+
}
34+
35+
private fun find(word: String): TrieNode? {
36+
var node = root
37+
for (chr in word) {
38+
node = node.children[chr] ?: return null
39+
}
40+
return node
2641
}
42+
43+
private data class TrieNode(
44+
val children: MutableMap<Char, TrieNode> = mutableMapOf(),
45+
var isEndOfWord: Boolean = false,
46+
)
2747
}

src/main/kotlin/ru/romanow/models/TreeNode.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ru.romanow.models
22

3-
import java.util.*
3+
import java.util.LinkedList
4+
import kotlin.collections.ArrayList
45

56
interface TNode<T : TNode<T>> {
67
var key: Int

src/test/kotlin/ru/romanow/medium/DeleteNodeInABalancedSearchTreeTest.kt

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)