【leetcode】763. 划分字母区间

48 阅读1分钟

leetcode-763.png

思路:记录每个字母最后出现的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
};