648. 单词替换
难度中等224收藏分享切换为英文接收动态反馈
在英语中,我们有一个叫做 词根
(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词
(successor)。例如,词根an
,跟随着单词 other
(其他),可以形成新的单词 another
(另一个)。
现在,给定一个由许多词根组成的词典 dictionary
和一个用空格分隔单词形成的句子 sentence
。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。
你需要输出替换之后的句子
示例 1:
输入:dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery" 输出:"the cat was rat by the bat"
示例 2:
输入:dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs" 输出:"a a b c"
1.配对单词是否包含
2.要搜最短的单词,经行比较
刚开始我会想到是把sentence切开,变成一个一个数组在经行第一个配对,
第二步我想用数组,可以数组太大,有很难查询,遍历容易超时
这时要想到java的集合,set中有不重复,容易判断查询的操作contains返回结果时(true or false),
这时要想到第二中情况了,我可以查询到有完整的一个立马停止,这样就不会有更长的出现了。
在将他返回数组
return string数组返回
class Solution {
public String replaceWords(List<String> dictionary, String sentence) {
Set<String> set=new HashSet<String>();//利用set不重复的原理,字母一样加长也没事
for(String root:dictionary){
set.add(root);
}
String [] words=sentence.split(" ");//遇到空格就分开
for(int i=0;i<words.length;i++){
String word=words[i]; //一个单词一个单词慢慢确认
for(int j=0;j<word.length();j++){
if(set.contains(word.substring(0,1+j))){
words[i]=word.substring(0,1+j);
break;
}
}
}
return String.join(" ",words);
}
}