Replace Words

xiaoxiao2021-02-28  138

In English, we have a concept called root, which can be followed by some other words to form another longer word - let's call this word successor. For example, the root an, followed by other, which can form another word another.

Now, given a dictionary consisting of many roots and a sentence. You need to replace all the successor in the sentence with the root forming it. If a successor has many roots can form it, replace it with the root with the shortest length.

You need to output the sentence after the replacement.

Example 1:

Input: dict = ["cat", "bat", "rat"] sentence = "the cattle was rattled by the battery" Output: "the cat was rat by the bat"

Note:

The input will only have lower-case letters.1 <= dict words number <= 10001 <= sentence words number <= 10001 <= root length <= 1001 <= sentence words length <= 1000

这题本身就是考察Trie树的,没什么难度。但是写的确实丑陋, 然后参考了其他的代码。有待多加练习 代码: class Solution { class Trie { TrieNode root = new TrieNode(); public void addWord(String word) { TrieNode curNode = root; for(int i=0;i<word.length();i++) { int c = word.charAt(i) - 'a'; if(curNode.next[c] == null) { curNode.next[c] = new TrieNode(); } curNode = curNode.next[c]; } curNode.isWord = true; } // find shortest prefix public String searchPrefix(String word) { TrieNode curNode = root; for(int i=0;i<word.length();i++) { int c = word.charAt(i) - 'a'; if(curNode == null) return word; if(curNode.isWord == true) return word.substring(0, i); curNode = curNode.next[c]; // cat tle } return word; } } class TrieNode { boolean isWord; TrieNode[] next; TrieNode() { next = new TrieNode[26]; } } Trie trie = new Trie(); public String replaceWords(List<String> dict, String sentence) { for(String item: dict) { trie.addWord(item); } String[] str = sentence.split(" "); for(int i = 0;i<str.length;i++){ str[i] = trie.searchPrefix(str[i]); } return String.join(" ",str); } }

转载请注明原文地址: https://www.6miu.com/read-19412.html

最新回复(0)