Replace Words

来源:互联网 发布:js实现中奖后彩带特效 编辑:程序博客网 时间:2024/06/04 18:45

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:

  1. The input will only have lower-case letters.
  2. 1 <= dict words number <= 1000
  3. 1 <= sentence words number <= 1000
  4. 1 <= root length <= 100
  5. 1 <= 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);    }}






原创粉丝点击