Java实现 LeetCode 648 单词替换(字典树)

£神魔★判官ぃ 2023-07-21 05:46 21阅读 0赞

648. 单词替换

在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。

现在,给定一个由许多词根组成的词典和一个句子。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。

你需要输出替换之后的句子。

示例 1:

输入:

  1. dict(词典) = ["cat", "bat", "rat"]
  2. sentence(句子) = "the cattle was rattled by the battery"
  3. 输出: "the cat was rat by the bat"

注:

输入只包含小写字母。
1 <= 字典单词数 <=1000
1 <= 句中词语数 <= 1000
1 <= 词根长度 <= 100
1 <= 句中词语长度 <= 1000

  1. class Solution {
  2. public String replaceWords(List<String> dict, String sentence) {
  3. Trie trie = new Trie();
  4. for(String word : dict){
  5. trie.insert(word);
  6. }
  7. String[] words = sentence.split(" ");
  8. StringBuilder sb = new StringBuilder();
  9. for(String word : words){
  10. sb.append(trie.change(word)).append(" ");
  11. }
  12. return sb.toString().substring(0,sb.toString().length()-1);
  13. }
  14. }
  15. class Trie{
  16. TrieNode root;
  17. public Trie(){
  18. root = new TrieNode();
  19. }
  20. public void insert(String word){
  21. TrieNode node = root;
  22. for(char c : word.toCharArray()){
  23. if(node.link[c - 'a'] == null){
  24. node.link[c - 'a'] = new TrieNode();
  25. }
  26. node = node.link[c - 'a'];
  27. }
  28. node.isEnd = true;
  29. }
  30. public String change(String word){
  31. StringBuilder sb = new StringBuilder();
  32. TrieNode node = root;
  33. boolean found = false;
  34. for(char c :word.toCharArray()){
  35. if(node.link[c - 'a'] == null){
  36. break;
  37. }
  38. else{
  39. sb.append(c);
  40. node = node.link[c - 'a'];
  41. if(node.isEnd){
  42. return sb.toString();
  43. }
  44. }
  45. }
  46. return word;
  47. }
  48. }
  49. class TrieNode{
  50. TrieNode[] link;
  51. boolean isEnd;
  52. public TrieNode() {
  53. link = new TrieNode[26];
  54. isEnd = false;
  55. }
  56. }

发表评论

表情:
评论列表 (有 0 条评论,21人围观)

还没有评论,来说两句吧...

相关阅读

    相关 648. 单词替换

    在英语中,我们有一个叫做 `词根`(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 `继承词`(successor)。例如,词根`an`,跟随着单