> For the complete documentation index, see [llms.txt](https://stanley7342.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stanley7342.gitbook.io/programming/leetcode/942.-di-string-match.md).

# 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]
```

## **解題思路**

{% hint style="info" %}

1. 遇到I從最小值開始遞增。
2. 遇到D從最大值開始遞減。
   {% endhint %}

## 程式解答

```c
class Solution 
{
public:
    vector<int> diStringMatch(string S) 
    {
        int N = S.length();
        int lo = 0;
        int hi = N;
        vector<int> ans;
        
        for (int i = 0; i < N; i++)
        {
            if(S[i] == 'I')
            {  
                ans.push_back(lo++);
            }
            else
            {
                ans.push_back(hi--);
            }
        }
        ans.push_back(lo);
        return ans;
    }
};
```
