leetcode763 划分字母区间

91 阅读1分钟

763. 划分字母区间 - 力扣(LeetCode)

思路:遍历一遍数组,判断当前元素在字符串中最后出现的位置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()