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++;

源码附上:

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;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值