给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。
例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。
对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。
那么成功对给定单词列表进行编码的最小字符串长度是多少呢?
示例:
输入: words = [“time”, “me”, “bell”]
输出: 10 说明: S = “time#bell#” ,
indexes = [0, 2, 5] 。
提示:
1 <= words.length <= 2000
1 <= words[i].length <= 7
每个单词都是小写字母 。
/**
* @param {string[]} words
* @return {number}
* 利用Set去重;然后对每个元素切片,利用 Set方法 查找集合中有无切片的元素,有则删除;计算最后剩余的长度。
*/
var minimumLengthEncoding = function(words) {
var hashSet = new Set([...words]), len = 0
for(let item of hashSet) {
for (let j = 1; j < item.length; j++) {
var temp = item.slice(j)
hashSet.has(temp) && hashSet.delete(temp)
}
}
hashSet.forEach(item => len += item.length + 1)
return len
};
审题时注意:
删除的只能是尾元素,不能是中间的元素
例如:time
删除的只能是ime,或me, 或e
而不能是im
本菜鸡刚开始就审 误会 题目说明了