1. 程式人生 > >942. DI String Match(python+cpp)

942. DI String Match(python+cpp)

題目:

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。