思路:记录每个字母最后出现的index的位置。
遍历字符串,当前字符最后index赋值给end,如果当前的遍历到的指针指向end,那么证明这个大距离已经出现。
var partitionLabels = function (s) {
let last = new Array(26).fill(0)
let res = []
// 记录字符最后出现的index
for (let i = 0; i < s.length; ++i) {
last[s[i].charCodeAt(0) - 'a'.charCodeAt(0)] = i
}
let start = 0, end = 0
for (let i = 0; i < s.length; ++i) {
// 更新 end
end = Math.max(end, last[s[i].charCodeAt(0) - 'a'.charCodeAt(0)])
if (i === end) {
res.push(end - start + 1)
// 更新 start,从下一个字符开始
start = end + 1
}
}
return res
};