942. DI String Match

Given a string S that 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]


C++: 40ms, 11.2MB
class Solution {
public:
    vector<int> diStringMatch(string S) {
        vector<int> result;
        int maxValue = S.size();
        int minValue = 0;
        for (auto ch : S)
        {
            if (ch == 'I')
            {
                result.push_back(minValue);
                minValue++;
            }
            else
            {
                result.push_back(maxValue);
                maxValue--;
            }
        }

        result.push_back(maxValue);

        return result;
    }
};

 

Python:

 

JavaScript:

posted @ 2019-03-07 09:08  czhao4  阅读(87)  评论(0)    收藏  举报