|
29 | 29 |
|
30 | 30 | */
|
31 | 31 | public class _648 {
|
32 |
| - public String replaceWords(List<String> dict, String sentence) { |
33 |
| - String[] tokens = sentence.split(" "); |
34 |
| - TrieNode trie = buildTrie(dict); |
35 |
| - return replaceWords(tokens, trie); |
36 |
| - } |
| 32 | + public static class Solution1 { |
| 33 | + public String replaceWords(List<String> dict, String sentence) { |
| 34 | + String[] tokens = sentence.split(" "); |
| 35 | + TrieNode trie = buildTrie(dict); |
| 36 | + return replaceWords(tokens, trie); |
| 37 | + } |
37 | 38 |
|
38 |
| - private String replaceWords(String[] tokens, TrieNode root) { |
39 |
| - StringBuilder stringBuilder = new StringBuilder(); |
40 |
| - for (String token : tokens) { |
41 |
| - stringBuilder.append(getShortestReplacement(token, root)); |
42 |
| - stringBuilder.append(" "); |
| 39 | + private String replaceWords(String[] tokens, TrieNode root) { |
| 40 | + StringBuilder stringBuilder = new StringBuilder(); |
| 41 | + for (String token : tokens) { |
| 42 | + stringBuilder.append(getShortestReplacement(token, root)); |
| 43 | + stringBuilder.append(" "); |
| 44 | + } |
| 45 | + return stringBuilder.substring(0, stringBuilder.length() - 1); |
43 | 46 | }
|
44 |
| - return stringBuilder.substring(0, stringBuilder.length() - 1); |
45 |
| - } |
46 | 47 |
|
47 |
| - private String getShortestReplacement(String token, final TrieNode root) { |
48 |
| - TrieNode temp = root; |
49 |
| - StringBuilder stringBuilder = new StringBuilder(); |
50 |
| - for (char c : token.toCharArray()) { |
51 |
| - stringBuilder.append(c); |
52 |
| - if (temp.children[c - 'a'] != null) { |
53 |
| - if (temp.children[c - 'a'].isWord) { |
54 |
| - return stringBuilder.toString(); |
| 48 | + private String getShortestReplacement(String token, final TrieNode root) { |
| 49 | + TrieNode temp = root; |
| 50 | + StringBuilder stringBuilder = new StringBuilder(); |
| 51 | + for (char c : token.toCharArray()) { |
| 52 | + stringBuilder.append(c); |
| 53 | + if (temp.children[c - 'a'] != null) { |
| 54 | + if (temp.children[c - 'a'].isWord) { |
| 55 | + return stringBuilder.toString(); |
| 56 | + } |
| 57 | + temp = temp.children[c - 'a']; |
| 58 | + } else { |
| 59 | + return token; |
55 | 60 | }
|
56 |
| - temp = temp.children[c - 'a']; |
57 |
| - } else { |
58 |
| - return token; |
59 | 61 | }
|
| 62 | + return token; |
60 | 63 | }
|
61 |
| - return token; |
62 |
| - } |
63 | 64 |
|
64 |
| - private TrieNode buildTrie(List<String> dict) { |
65 |
| - TrieNode root = new TrieNode(' '); |
66 |
| - for (String word : dict) { |
67 |
| - TrieNode temp = root; |
68 |
| - for (char c : word.toCharArray()) { |
69 |
| - if (temp.children[c - 'a'] == null) { |
70 |
| - temp.children[c - 'a'] = new TrieNode(c); |
| 65 | + private TrieNode buildTrie(List<String> dict) { |
| 66 | + TrieNode root = new TrieNode(' '); |
| 67 | + for (String word : dict) { |
| 68 | + TrieNode temp = root; |
| 69 | + for (char c : word.toCharArray()) { |
| 70 | + if (temp.children[c - 'a'] == null) { |
| 71 | + temp.children[c - 'a'] = new TrieNode(c); |
| 72 | + } |
| 73 | + temp = temp.children[c - 'a']; |
71 | 74 | }
|
72 |
| - temp = temp.children[c - 'a']; |
| 75 | + temp.isWord = true; |
73 | 76 | }
|
74 |
| - temp.isWord = true; |
| 77 | + return root; |
75 | 78 | }
|
76 |
| - return root; |
77 |
| - } |
78 | 79 |
|
79 |
| - public class TrieNode { |
80 |
| - char val; |
81 |
| - TrieNode[] children; |
82 |
| - boolean isWord; |
| 80 | + public class TrieNode { |
| 81 | + char val; |
| 82 | + TrieNode[] children; |
| 83 | + boolean isWord; |
83 | 84 |
|
84 |
| - public TrieNode(char val) { |
85 |
| - this.val = val; |
86 |
| - this.children = new TrieNode[26]; |
87 |
| - this.isWord = false; |
| 85 | + public TrieNode(char val) { |
| 86 | + this.val = val; |
| 87 | + this.children = new TrieNode[26]; |
| 88 | + this.isWord = false; |
| 89 | + } |
88 | 90 | }
|
89 | 91 | }
|
90 | 92 | }
|
0 commit comments