【LeetCode热题100(76/100)】划分字母区间

题目地址: 链接

思路:

  1. 使用map记录最远字符串的地址
  2. 重新遍历,如果当前内容等于最远字符串地址,那么入队列
ts 复制代码
function partitionLabels(s: string): number[] {
    let ans = [];
    const n = s.length;
    const map = new Map();
    for(let i = 0; i < n; i ++) {
        map.set(s[i], i);
    }
    let maxIdx = 0;
    for(let i = 0; i < n; i ++) {
        let q = map.get(s[i]);
        maxIdx = Math.max(maxIdx, q);
        if(maxIdx <= i) {
            ans.push(i);
            maxIdx ++;
        }
    }
    ans = ans.map((num, idx) => {
        if(idx) return num - ans[idx - 1];
        else return num + 1
    })
    return ans;
};
相关推荐
LYFlied8 小时前
【每日算法】LeetCode 560. 和为 K 的子数组
前端·数据结构·算法·leetcode·职场和发展
Epiphany.5568 小时前
dfn序优化树上背包
算法
MicroTech20258 小时前
微算法科技(NASDAQ MLGO)区块链混合检测模型优化确保全网防御策略一致性
科技·算法·区块链
LYFlied8 小时前
【每日算法】 LeetCode 394. 字符串解码
前端·数据结构·算法·leetcode·面试·职场和发展
董世昌418 小时前
break和continue的区别是什么?
java·jvm·算法
Wcowin8 小时前
Mac Shell 环境优化指南
macos·职场和发展·蓝桥杯
夏鹏今天学习了吗8 小时前
【LeetCode热题100(75/100)】跳跃游戏 II
算法·leetcode·游戏
lxh01138 小时前
复原IP地址
前端·数据结构·算法