思路:遍历一遍数组,判断当前元素在字符串中最后出现的位置end,然后再来一个循环判断当前元素的下一个元素到直到end前一个位置中的元素,获取它在字符串中出现的最后位置 ,如果大于end,end重新赋值,都判断完成后截取一个片段成功。
/**
* @param {string} s
* @return {number[]}
*/
var partitionLabels = function (s) {
let len = s.length
let res = []
for (let i = 0; i < len; i++) {
let end = s.lastIndexOf(s[i])
// 字符串中只有这一个元素
if (i == end) {
res.push(1)
continue
}
for (let j = i + 1; j < end; j++) {
if (s.lastIndexOf(s[j]) > end) {
end = s.lastIndexOf(s[j])
}
}
res.push(s.slice(i, end + 1).length)
i = end
}
return res
};
let S = "ababcbacadefegdehijhklij"
console.log(partitionLabels(S))
一个小的优化点:可以先使用map存储一下字符串中所有字符对应的最后位置。可以减少后面遍历过程中重复字符去执行lastIndexOf()