class Solution {
public int[] diStringMatch(String S) {
int len = S.length();
char[] s = S.toCharArray();
int[] res = new int[len+1];
for(int i=len-1; i>=0; i--){
if(s[i]=='D'){
int max=0;
for(int j=i+1;j<len+1;j++){
if(max<res[j])
max = res[j];
}
res[i]=max+1;
}else{
for(int j=i+1;j<len+1;j++){
res[j]=res[j]+1;
}
res[i]=0;
}
}
return res;
}
}
这是我自己一开始写的
class Solution {
public int[] diStringMatch(String S) {
int len = S.length();
int[] res = new int[len+1];
int min = 0,max=len;
char[] s = S.toCharArray();
for(int i=0;i<len;i++){
if(s[i]=='I')
res[i]=min++;
else
res[i]=max--;
}
res[len] = max;
return res;
}
}
这是排名第一的思路。
遇到“I”则证明下一个数比该数大,从小的那一端赋值,遇到“D”则证明下一个数比该数小,从大的一端赋值。