0509|942. 增减字符串匹配
贪心:根据提干规则,输入的 s 字符串长度为 n,输出的 perm 的长度就是 n + 1,
- 那么可以定义 perm 中所有 number 的范围为
[0, n]
。其中min = 0, max = n
; - 我们可以这样想,如果:
s[i] == 'I'
,那么只要perm[i]
尽可能小就可满足条件,那只需要把当前最小的min
放入即可,同时把min++
;s[i] == 'D'
,同样的放入当前最大的值max
即可,然后把max++
;- perm 直到最后一个成员,此时
min
和max
已经相等,加入哪一个都可以。
- 时间复杂度:O(n);空间复杂度:O(1)
var diStringMatch = function (s) {
const len = s.length;
const res = [];
let [min, max] = [0, len];
for (let i = 0; i < len; i++) {
res[i] = s[i] === 'I' ? min++ : max--;
}
res.push(min);
return res;
};