942. DI String Match(python+cpp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/84231607

题目:

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。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/84231607