传入许多词根组成的词典 和 一个句子,需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。
思路:
将arr字典,转换为一个大对象,例如arr = ["catt", "cat", "bat", "rat"] 转换为入下图所示
当遇到最后一个时候,添加end属性,node.end = true
将 str = "the cattle was rattled by the battery",拆分为一个个小单词,然后进一步将单词拆分一个个字符,比如cattle拆分为 c a t t l e,依次在上面生成的字典中去查找,如果有一层找不到则,直接返回原来单词,我们不替换,进入下一个单词,如果一直找到了,直到遇到了end属性,说明可以结束了,直接替换掉
var replaceWords = function (arr, str) {
var root = {};
for (var word of arr) {
var node = root;
for (var s of word) {
if (!node[s]) node[s] = {};
node = node[s];
}
node.end = true;
}
var brr = str.split(' ');
for (var i = 0; i < brr.length; i++) {
var word = brr[i];
var str = '';
var node = root;
for (var s of word) {
if (node.end) {
brr[i] = str;
break;
}
if (!node[s]) {
break;
}
str += s;
node = node[s];
}
}
return brr.join(' ');
};
代码调试
var arr = ["catt", "cat", "bat", "rat"], str = "the cattle was rattled by the battery"
console.log(replaceWords(arr, str));