思路:一开始想到的是利用排序,对当前i的位置到最后进行升序或者降序,但是这样子很费时间,后来借助其他作者的思路用两个指针,从low和high开始插入。如果当前为I,则插入low的值,low++;如果当前为D,那么插入D,D--;
1、新定义一个数组result,用于插入元素
2、遍历string,S[i]=='I',result.push_back(I),i++;S[i]=='D',result.push_back(D),D--;
3、return result;
其中有一个容易容易犯的错误,其实遍历的元素是N个,但是result这个数组的长度是N+1,最后一个元素会经常忽略赋值。
class Solution {
public:
vector<int> diStringMatch(string S) {
vector<int> result;
int I =0;
int D = S.length();
for(int i=0;i<=S.length();i++){
if(S[i]=='I'){
result.push_back(I);
I++;
}else if(S[i]=='D'){
result.push_back(D);
D--;
}
}
//容易忽略的最后一个元素
result.push_back(I);
return result;
}
};