题目描述
给定一个数组:dictionary[]、一个句子:sentence;如果sentence的单词词根是:dictionary;那么使用dictionary中最短的词根进行替换。
示例1:
输入:
dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"
输出:"the cat was rat by the bat"
解题思路
1. 对sentence做遍历操作,如果遇到空格或者已经结束,则获取一个单词。
2. 对这个单词和dictionary中的词根做遍历,选择最小长度的词根,替换当前单词。
3. 构造完成新的句子后,返回该句子。
代码实现
import java.util.Arrays;
import java.util.List;
class Solution {
public String replaceWords(List<String> dictionary, String sentence) {
StringBuilder res = new StringBuilder();
for (int i = 0; i < sentence.length(); ) {
int start = i;
StringBuilder sb = new StringBuilder();
while (start < sentence.length() && sentence.charAt(start) != ' ') {
sb.append(sentence.charAt(start));
start++;
}
String s = sb.toString();
int minLength = s.length();
for (String d : dictionary) {
if (s.startsWith(d) && d.length() < minLength) {
s = d;
minLength = s.length();
}
}
res.append(s);
i = start;
if (i >= sentence.length()) {
break;
}
if (sentence.charAt(i) == ' ') {
res.append(' ');
i++;
}
}
return res.toString();
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.replaceWords(Arrays.asList("cat", "bat", "rat"), "the cattle was rattled by the battery"));
}
}
总结
这道题也可以采用HashSet来做比较,新的代码执行效率和老代码执行效率相似,其他高效率方法欢迎给出思路;HashSet的实现代码如下:
public String replaceWords(List<String> dictionary, String sentence) {
StringBuilder res = new StringBuilder();
Set<String> set = new HashSet<>(dictionary);
for (int i = 0; i < sentence.length(); ) {
int start = i;
boolean find = false;
StringBuilder sb = new StringBuilder();
while (start < sentence.length() && sentence.charAt(start) != ' ') {
sb.append(sentence.charAt(start));
if(!find && set.contains(sb.toString())) {
res.append(sb);
find = true;
}
start++;
}
if(!find) {
res.append(sb);
}
i = start;
if (i >= sentence.length()) {
break;
}
if (sentence.charAt(i) == ' ') {
res.append(' ');
i++;
}
}
return res.toString();
}