942. DI String Match(python+cpp)

本文详细解析了DI字符串匹配算法,该算法根据输入字符串中的'I'(增加)和'D'(减少)字符,生成一个满足特定条件的排列数组。通过实例演示了算法的工作原理,并提供了Python和C++实现代码。

题目:

Given a string Sthat only contains “I” (increase) or “D” (decrease), let N = S.length.
Return any permutation A of [0, 1, ..., N] such that for all i = 0, ..., N-1:
If S[i] == "I", then A[i] < A[i+1]
If S[i] == "D", then A[i] > A[i+1]
Example 1:

Input: "IDID" 
Output: [0,4,1,3,2] 

Example 2:

Input: "III" 
Output: [0,1,2,3] 

Example 3:

Input: "DDI" 
Output: [3,2,0,1]  

Note:
1 <= S.length <= 10000
S only contains characters "I" or "D".

解释:
注意,output的长度比input的长度多1。
python代码:

class Solution:
    def diStringMatch(self, S):
        """
        :type S: str
        :rtype: List[int]
        """
        init =list(range(len(S)+1))
        result=[]
        for s in S:
            if s=='D':
                result.append(init.pop())
            else:
                result.append(init.pop(0))
        return result+init

c++代码:

#include<deque>
using namespace std;
class Solution {
public:
    vector<int> diStringMatch(string S) {
        deque<int> init;
        for (int i=0;i<=S.size();i++)
            init.push_back(i);
        vector<int> result;
        for (auto s:S)
        {
            if (s=='D')
            {
                result.push_back(init.back());
                init.pop_back();
            }
            else
            {
                result.push_back(init.front());
                init.pop_front();
            }
        }
        result.push_back(init.back());
        return result;
    }
};

总结:
学会了使用stl中的deque。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值