Dowemo
0 0 0 0

English, in, we've. root which can be followed by some other words to form another longer & s call this successor For example, the root. an followed by, other which can form another word another.

A now, given a dictionary consisting of many roots and a sentence. You need. successor in the sentence with the rootForming it. If a. successor has many rootsCan form it, replace it with the root with the shortest length.

You need to output the sentence after the replacement.

示例1:

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

注:

  • The input will only have lower-case.
  • 1 <= pk words number <= 1000
  • 1 <= sentence words number <= 1000
  • 1 <= root length <= 100
  • 1 <= sentence words length <= 1000

It's just to look at the trie, and nothing is difficult. But it's ugly, and then reference the other code. You need to learn more.
Code:
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);
 }
}









Copyright © 2011 Dowemo All rights reserved.    Creative Commons   AboutUs