增减字符串匹配
难度:简单
利用贪心算法的思想,当字符为I时,则当前整数为[0,n]中未使用过的整数的最小值,反之亦然。
那么我们可以利用双指针,max表示为当前剩余最大整数,min表示当前剩余最小整数,遍历字符串:
- 如果遇到’I’,则将min赋给数组当前下标,并min++;
- 如果遇到’D’,则将max赋给数组当前下标,并max–;
遍历结束后,max势必会与min相等,则将max赋给res[len]。
代码如下:
public int[] diStringMatch(String s) {
int len = s.length();
int max = len;
int min = 0;
int[] res = new int[len+1];
for(int i = 0; i<len;i++){
if(s.charAt(i)=='I'){
res[i] = min;
min++;
}else{
res[i] = max;
max--;
}
}
res[len] = max;
return res;
}
执行结果:成功