题目大意:根据字符串S(其中D表示‘Decrease’,I表示‘Increase’),找到一个序列A,满足两个条件:
1.相邻的两个数字的大小满足S中对应位置的含义(D 或者 I);
2.数组A中的数字必须是0~(S的长度);
此题答案可能有多种,只要能正确写出其中一种情况即可;
下面举一个例子:
Input: "IDID" Output: [0,4,1,3,2]
1.相邻位置满足S中的大小关系,(0,4)对应‘I’,(4,1)对应‘D’,(1,3)对应‘I’,(3,2)对应‘D’;
2.数组A中的数字在0~4(4表示S的长度)范围内。
看了评论区中不错的解法,分享给大家:
1.统计S中‘D’的个数,该值的实际含义为在D序列和在S序列中的基值,用两个变量left和right来存储这个基值
2.遍历S序列,如果当前值为‘D’,则left--,反之right++;
扫描二维码关注公众号,回复:
4990761 查看本文章
源码附上:
class Solution {
public:
vector<int> diStringMatch(string S) {
vector<int> res;
int left=count(S.begin(),S.end(),'D');
int right=left;
res.push_back(left);
for(char c:S)
{
res.push_back(c=='D'?--left:++right);
}
return res;
}
};