Open in App
Not now

# Generate a sequence with the given operations

• Difficulty Level : Easy
• Last Updated : 07 Dec, 2022

Given a string which contains only (increase) and (decrease). The task is to return any permutation of integers [0, 1, …, N] where N â‰¤ Length of S such that for all i = 0, …, N-1

1. If S[i] == “D”, then A[i] > A[i+1]
2. If S[i] == “I”, then A[i] < A[i+1].

Note that output must contain distinct elements.

Examples:

Input: S = “DDI”
Output: [3, 2, 0, 1]

Input: S = “IDID”
Output: [0, 4, 1, 3, 2]

Approach:

If S[0] == “I”, then choose as the first element. Similarly, if S[0] == “D”, then choose as the first element. Now for every operation, choose the next maximum element which hasn’t been chosen before from the range [0, N], and for the operation, choose the next minimum.

Below is the implementation of the above approach:

## C++

 `//C++ Implementation of above approach ` `#include` `using` `namespace` `std;` `    ``// function to find minimum required permutation ` `    ``void`  `StringMatch(string s) ` `    ``{` `    ``int` `lo=0, hi = s.length(), len=s.length(); ` `    ``vector<``int``> ans;` `    ``for` `(``int` `x=0;x

## Java

 `// Java Implementation of above approach ` `import` `java.util.*;`   `class` `GFG ` `{`   `// function to find minimum required permutation ` `static` `void` `StringMatch(String s) ` `{` `    ``int` `lo=``0``, hi = s.length(), len=s.length(); ` `    ``Vector ans = ``new` `Vector<>();` `    ``for` `(``int` `x = ``0``; x < len; x++)` `    ``{` `        ``if` `(s.charAt(x) == ``'I'``) ` `        ``{` `            ``ans.add(lo) ;` `            ``lo += ``1``;` `        ``}` `        ``else` `        ``{` `            ``ans.add(hi) ;` `            ``hi -= ``1``;` `        ``}` `    ``}` `            ``ans.add(lo) ;` `    ``System.out.print(``"["``);` `    ``for``(``int` `i = ``0``; i < ans.size(); i++)` `    ``{` `        ``System.out.print(ans.get(i));` `        ``if``(i != ans.size()-``1``)` `            ``System.out.print(``","``);` `    ``}` `    ``System.out.print(``"]"``);` `}`   `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``String S = ``"IDID"``;` `    ``StringMatch(S); ` `}` `}`   `// This code is contributed by Rajput-Ji`

## Python

 `# Python Implementation of above approach`   `# function to find minimum required permutation` `def` `StringMatch(S):` `    ``lo, hi ``=` `0``, ``len``(S)` `    ``ans ``=` `[]` `    ``for` `x ``in` `S:` `        ``if` `x ``=``=` `'I'``:` `            ``ans.append(lo)` `            ``lo ``+``=` `1` `        ``else``:` `            ``ans.append(hi)` `            ``hi ``-``=` `1`   `    ``return` `ans ``+` `[lo]`   `# Driver code` `S ``=` `"IDID"` `print``(StringMatch(S))`

## C#

 `// C# Implementation of above approach ` `using` `System;` `using` `System.Collections.Generic;`   `class` `GFG ` `{`   `// function to find minimum required permutation ` `static` `void` `StringMatch(String s) ` `{` `    ``int` `lo=0, hi = s.Length, len=s.Length; ` `    ``List<``int``> ans = ``new` `List<``int``>();` `    ``for` `(``int` `x = 0; x < len; x++)` `    ``{` `        ``if` `(s[x] == ``'I'``) ` `        ``{` `            ``ans.Add(lo) ;` `            ``lo += 1;` `        ``}` `        ``else` `        ``{` `            ``ans.Add(hi) ;` `            ``hi -= 1;` `        ``}` `    ``}` `            ``ans.Add(lo) ;` `    ``Console.Write(``"["``);` `    ``for``(``int` `i = 0; i < ans.Count; i++)` `    ``{` `        ``Console.Write(ans[i]);` `        ``if``(i != ans.Count-1)` `            ``Console.Write(``","``);` `    ``}` `    ``Console.Write(``"]"``);` `}`   `// Driver code` `public` `static` `void` `Main(String[] args)` `{` `    ``String S = ``"IDID"``;` `    ``StringMatch(S); ` `}` `}`   `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output

`[0,4,1,3,2]`

Time Complexity: O(n), where n is the length of the given string.
Auxiliary Space: O(n), where n is the length of the given string.

My Personal Notes arrow_drop_up
Related Articles