【LeetCode】单词替换 Java 题解
题目描述
在英语中,我们有一个叫做 词根(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根 an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。
现在,给定一个由许多词根组成的词典 dictionary 和一个用空格分隔单词形成的句子 sentence。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。
你需要输出替换之后的句子。
思路分析
今天的算法题目是字符串处理题目,题目明确了单词的拼接规则,词根 + 其他一些词,组成新的单词。题目给出了词根组成的词典 dictionary 和一个用空格分隔单词形成的句子 sentence。我们需要在 sentence 中找出带有词根的组成单词并替换成词根。转换成程序的就是观察词根出现的位置是不是首位置。
根据题目含义,如果继承词有许多可以形成它的词根,则用最短的词根替换它。我们对 dictionary 数组进行单词长度排序。排序我们一般使用 sort() 函数,sort() 默认是按照自然序排序,也就是字母的排序和数值升序。按照单词的长度排序,我们需要自定排序规则,可以使用 Comparator 自定义排序,compare 返回一个整数,负数表示小于,0 表示相等, 正数表示大于。
dictionary 数组排序完成之后,我们在替换 sentence 中的词根,完成题目要求。具体实现代码如下,供参考。
通过代码
总结
上述算法的时间复杂度是 O(n log n), 空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/dc4376361d871892a158c2d10】。文章转载请联系作者。
评论