给定只含 “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] 中的数就可以得到符合规则的数组

  1. /**
  2. * @param {string} s
  3. * @return {number[]}
  4. */
  5. var diStringMatch = function(s) {
  6. let min = 0;
  7. let max = s.length;
  8. const res = []
  9. for (let i = 0; i < s.length; i++) {
  10. if (s[i] === 'I') {
  11. res.push(min)
  12. min++
  13. }
  14. if (s[i] === 'D') {
  15. res.push(max)
  16. max--
  17. }
  18. }
  19. res.push(min)
  20. return res
  21. };

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/di-string-match
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。