原题:
由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:
- 如果 p e r m [ i ] < p e r m [ i + 1 ] perm[i] < perm[i + 1] perm[i]<perm[i+1],那么 s [ i ] = = ′ I ′ s[i] == 'I' s[i]==′I′
- 如果
p
e
r
m
[
i
]
>
p
e
r
m
[
i
+
1
]
perm[i] > perm[i + 1]
perm[i]>perm[i+1],那么
s
[
i
]
=
=
′
D
′
s[i] == 'D'
s[i]==′D′
给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中任何一个
解题思路
使用贪心算法即可(该题难度为简单,所以过程省略
代码
class Solution {
public int[] diStringMatch(String s) {
int n = s.length();
int lo = 0, hi = n;
int[] perm = new int[n+1];
for(int i = 0;i < n; i++){
perm[i] = s.charAt(i) == 'I' ? lo++ : hi--;
}
perm[n] = hi;
return perm;
}
}