942. DI String Match #
题目 #
Given a string S
that only contains “I” (increase) or “D” (decrease), let N = S.length
.
Return any permutation A
of [0, 1, ..., N]
such that for all i = 0, ..., N-1
:
- If
S[i] == "I"
, thenA[i] < A[i+1]
- If
S[i] == "D"
, thenA[i] > A[i+1]
Example 1:
Input: "IDID"
Output: [0,4,1,3,2]
Example 2:
Input: "III"
Output: [0,1,2,3]
Example 3:
Input: "DDI"
Output: [3,2,0,1]
Note:
1 <= S.length <= 10000
S
only contains characters"I"
or"D"
.
题目大意 #
给定只含 “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]
解题思路 #
- 给出一个字符串,字符串中只有字符
"I"
和字符"D"
。字符"I"
代表A[i] < A[i+1]
,字符"D"
代表A[i] > A[i+1]
,要求找到满足条件的任意组合。 - 这一题也是水题,取出字符串长度即是最大数的数值,然后按照题意一次排出最终数组即可。
代码 #
package leetcode
func diStringMatch(S string) []int {
result, maxNum, minNum, index := make([]int, len(S)+1), len(S), 0, 0
for _, ch := range S {
if ch == 'I' {
result[index] = minNum
minNum++
} else {
result[index] = maxNum
maxNum--
}
index++
}
result[index] = minNum
return result
}