给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。
返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i = 0, …, N-1,都有:
如果 S[i] == “I”,那么 A[i] < A[i+1]
如果 S[i] == “D”,那么 A[i] > A[i+1]
示例
示例 1:
输入:”IDID”
输出:[0,4,1,3,2]
示例 2:
输入:”III”
输出:[0,1,2,3]
示例 3:
输入:”DDI”
输出:[3,2,0,1]
题解
如题 输入 “IDID” 需要在 [0,1,2,3,4] 中选取并拼凑出符合 I D 规则的数组 [0,4,1,3,2]
遍历字符串,当遇到 “I” 时,选取数组中最小值 “0” ,后面一个位肯定会满足 A[i] < A[i+1]
当遇到 “D” 时,选取数组中最大值 “4” ,后面一个位肯定会满足 A[i] > A[i+1]
这样依次分配完所有 [0,1,2,3,4] 中的数就可以得到符合规则的数组
/**
* @param {string} s
* @return {number[]}
*/
var diStringMatch = function(s) {
let min = 0;
let max = s.length;
const res = []
for (let i = 0; i < s.length; i++) {
if (s[i] === 'I') {
res.push(min)
min++
}
if (s[i] === 'D') {
res.push(max)
max--
}
}
res.push(min)
return res
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/di-string-match
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。