1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
var partitionLabels = function (s) { const stack = []; const indexMap = {}; for (let i = 0; i < s.length; i++) { const char = s[i]; if (indexMap[char] === undefined) { stack.push([i, i]); indexMap[s[i]] = i; } else { const charRange = [indexMap[char], i]; while ( stack.length > 0 && stack[stack.length - 1][1] >= charRange[0] && stack[stack.length - 1][0] >= charRange[0] ) { stack.pop(); } if ( stack.length > 0 && stack[stack.length - 1][1] >= charRange[0] && stack[stack.length - 1][0] < charRange[0] ) { stack[stack.length - 1][0] = Math.min( stack[stack.length - 1][0], charRange[0] ); stack[stack.length - 1][1] = Math.max( stack[stack.length - 1][1], charRange[1] ); } else { stack.push(charRange); } } } return stack.map((item) => item[1] - item[0] + 1); };
|