一、题目描述
由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:
- 如果
perm[i] < perm[i + 1],那么s[i] == 'I' - 如果
perm[i] > perm[i + 1],那么s[i] == 'D'
给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。
示例 1:
输入: s = "IDID"
输出: [0,4,1,3,2]
示例 2:
输入: s = "III"
输出: [0,1,2,3]
示例 3:
输入: s = "DDI"
输出: [3,2,0,1]
提示:
1 <= s.length <= 105s只包含字符"I"或"D"
二、思路分析
- 如果都是
IIIII....的情况,所以从最小的0开始,保证尽可能多的递增序列 - 如果都是
DDDDD....的情况,所以应该是从最大的开始倒序排列,保证尽可能多的递减序列 - 所以如果是
I,从最小的开始累加,如果是D,从最大的开始累减
三、代码答案
/**
* @param {string} s
* @return {number[]}
*/
var diStringMatch = function (s) {
const perm = []
let min = 0, max = s.length
for (var i = 0; i < s.length + 1; i++) {
if (s[i] === "I") {
perm.push(min)
min +=1
} else {
// D
perm.push(max)
max -= 1
}
}
return perm
};