leetcode DI String Match

题目

题目大意:根据字符串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;
    }
};

猜你喜欢

转载自blog.csdn.net/Exaggeration08/article/details/86559100