• 算法


    Replace Words

    一开始我的思路:

    HashSet + StringBuilder,每个词遍历在set中查找。

    class Solution {
        public String replaceWords(List<String> dict, String sentence) {
            Set<String> set = new HashSet<>();
            
            for(String str : dict) set.add(str);
            
            String [] s = sentence.split(" ");
            
            StringBuilder res = new StringBuilder();
            
            for(String str : s)
            {
                boolean flag = false;
                for(int i=1;i<str.length();i++)
                {
                    String tmp = str.substring(0,i);
                    if(set.contains(tmp))
                    {
                        res.append(tmp+" ");
                        flag = true;
                        break;
                    }
                }
                if(!flag) res.append(str + " ");
            }
            
            return res.toString().substring(0,res.length()-1);
        }
    }

    但效率并不高,这道题最好的解法其实是用前缀树(Trie / Prefix Tree)来做,关于前缀树使用之前有一道很好的入门题Implement Trie (Prefix Tree)。了解了前缀树的原理机制,那么我们就可以发现这道题其实很适合前缀树的特点。我们要做的就是把所有的前缀都放到前缀树里面,而且在前缀的最后一个结点的地方将标示isWord设为true,表示从根节点到当前结点是一个前缀,然后我们在遍历单词中的每一个字母,我们都在前缀树查找,如果当前字母对应的结点的表示isWord是true,我们就返回这个前缀,如果当前字母对应的结点在前缀树中不存在,我们就返回原单词,这样就能完美的解决问题了。所以啊,以后遇到了有关前缀或者类似的问题,一定不要忘了前缀树这个神器哟~

  • 相关阅读:
    04_远程管理常用命令
    03_文件和目录常用命令
    02_Linux 终端命令格式
    01_常用 Linux 命令的基本使用
    test
    centOS 7 更改root密码
    安装 centos7
    1
    IO模型
    使用git连接到Github
  • 原文地址:https://www.cnblogs.com/qlky/p/7705516.html
Copyright © 2020-2023  润新知