首页 > 其他 > 详细

力扣——单词替换

时间:2019-03-02 21:47:14      阅读:206      评论:0      收藏:0      [点我收藏+]

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

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

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

示例 1:

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

注:

  1. 输入只包含小写字母。
  2. 1 <= 字典单词数 <=1000
  3. 1 <=  句中词语数 <= 1000
  4. 1 <= 词根长度 <= 100
  5. 1 <= 句中词语长度 <= 1000
import java.util.List;

class Solution {

    private class Trie{
        private boolean leaf;
        private Trie[] childs;

        public Trie() {
            this.childs = new Trie[26];
        }

        public boolean isLeaf() {
            return leaf;
        }

        public void setLeaf(boolean leaf) {
            this.leaf = leaf;
        }

        public Trie getChild(char c) {
            return childs[c- ‘a‘];
        }

        public Trie addChild(char c){
            Trie a = new Trie();
            childs[c - ‘a‘] = a;
            return a;
        }

        public Boolean hasChild(char c){
            if(childs[c-‘a‘] != null){
                return true;
            }
            return false;
        }

        public void addWord(String word){
            Trie now = this;
            if(word == null || word.isEmpty()){
                return;
            }
            for(char c : word.toCharArray()){
                if(now.hasChild(c)){
                    now = now.getChild(c);
                }else{
                    now = now.addChild(c);
                }
            }
            now.setLeaf(true);
        }

        public String getShortTestRoot(String word){
            String res = "";
            if(word == null || word.isEmpty()){
                return res;
            }
            Trie now = this;
            for(char c : word.toCharArray()){
                if(now.hasChild(c)){
                    now = now.getChild(c);
                    res += c;
                    if(now.isLeaf()){
                        return res;
                    }
                }else{
                    break;
                }
            }
            return "";
        }
    }

    public String replaceWords(List<String> dict, String sentence) {
        Trie root = new Trie();
        for(String w : dict){
            root.addWord(w);
        }
        String[] dep = sentence.split(" ");
        for(int i = 0; i< dep.length; i++){
            String change = root.getShortTestRoot(dep[i]);
            if(!change.isEmpty()){
                dep[i] = change;
            }
        }
        return String.join(" ", dep);
    }
}

 

力扣——单词替换

原文:https://www.cnblogs.com/JAYPARK/p/10463077.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!