Related Articles
Generate an alternate increasing and decreasing Array
• Difficulty Level : Expert
• Last Updated : 04 Aug, 2020

Given a string str of size N containing two types of character only that are “I” or “D”. The task is to generate an array arr[0, 1, . . N] of size N + 1 sattisfing the following conditions:

• If str[i] == “I”   then   arr[i] < arr[i+1]
• If str[i] == “D”  then  arr[i] > arr[i+1]

Examples:

Input: str = “IDID”
Output: 0 4 1 3 2
Explaination:
str == “I” therfore arr < arr
str == “D” therfore arr > arr
str == “I” therfore arr < arr
str == “D” therfore arr > arr
Input: str = “III”
Output: 0 1 2 3

Approach:

1. Initialize variable START as 0 and END as N.
2. Iterate over the entire array.
3. If str[i] == “I”  then assign START at arr[i] and Increment the START.
4. If str[i] == “D” then assign END at arr[i] and Decrement the END.
5. Now the last element of the array isn’t assigned so assign START at A[N].

Below is the implementation of the approach.

## C++

 `// C++ program to Generate an increasing``// and decreasing array`` ` `#include ``using` `namespace` `std;`` ` `// Function that returns generated array``int``* DiStirngMatch(string Str)``{``    ``int` `N = Str.length();`` ` `    ``// Dynamically allocate array``    ``int``* arr = ``new` `int``[N];`` ` `    ``// START=0, END=N``    ``int` `START = 0, END = N;`` ` `    ``// iterate over array``    ``for` `(``int` `i = 0; i < N; i++) {`` ` `        ``// if Str[i]=='I' assign arr[i]``        ``// as START and increment START``        ``if` `(Str[i] == ``'I'``)``            ``arr[i] = START++;`` ` `        ``// if str[i]=='D' assign arr[i]``        ``// as END and decrement END``        ``if` `(Str[i] == ``'D'``)``            ``arr[i] = END--;``    ``}`` ` `    ``// assign A[N] as START``    ``arr[N] = START;`` ` `    ``// return starting``    ``// address of array A``    ``return` `arr;``}`` ` `// Driver Program``int` `main()``{``    ``string Str = ``"IDID"``;``    ``int` `N = Str.length();``    ``int``* ptr = DiStirngMatch(Str);``    ``for` `(``int` `i = 0; i <= N; i++)``        ``cout << ptr[i] << ``" "``;`` ` `    ``return` `0;``}`

## Java

 `// Java program to generate an increasing``// and decreasing array``class` `GFG{`` ` `// Function that returns generated array``static` `int` `[]DiStirngMatch(String Str)``{``    ``int` `N = Str.length();`` ` `    ``// Dynamically allocate array``    ``int` `[]arr = ``new` `int``[N + ``1``];`` ` `    ``// START=0, END=N``    ``int` `START = ``0``, END = N;`` ` `    ``// Iterate over array``    ``for``(``int` `i = ``0``; i < N; i++)``    ``{``         ` `        ``// if Str[i]=='I' assign arr[i]``        ``// as START and increment START``        ``if` `(Str.charAt(i) == ``'I'``)``            ``arr[i] = START++;`` ` `        ``// if str[i]=='D' assign arr[i]``        ``// as END and decrement END``        ``if` `(Str.charAt(i) == ``'D'``)``            ``arr[i] = END--;``    ``}`` ` `    ``// Assign A[N] as START``    ``arr[N] = START;`` ` `    ``// Return starting``    ``// address of array A``    ``return` `arr;``}`` ` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``String Str = ``"IDID"``;``    ``int` `N = Str.length();``    ``int``[] ptr = DiStirngMatch(Str);``     ` `    ``for``(``int` `i = ``0``; i <= N; i++)``        ``System.out.print(ptr[i] + ``" "``);``}``}`` ` `// This code is contributed by amal kumar choubey`

## Python3

 `# Python3 program to generate an ``# increasing and decreasing array`` ` `# Function that returns generated array``def` `DiStirngMatch(``Str``):`` ` `    ``N ``=` `len``(``Str``)`` ` `    ``# Dynamically allocate array``    ``arr ``=` `(N ``+` `1``) ``*` `[``0``]`` ` `    ``# START, END= 0 ,N``    ``START, END ``=` `0``, N`` ` `    ``# Iterate over array``    ``for` `i ``in` `range` `(N):`` ` `        ``# If Str[i]=='I' assign arr[i]``        ``# as START and increment START``        ``if` `(``Str``[i] ``=``=` `'I'``):``            ``arr[i] ``=` `START``            ``START ``+``=` `1`` ` `        ``# If str[i]=='D' assign arr[i]``        ``# as END and decrement END``        ``if` `(``Str``[i] ``=``=` `'D'``):``            ``arr[i] ``=` `END``            ``END ``-``=` `1`` ` `    ``# Assign A[N] as START``    ``arr[N] ``=` `START``     ` `    ``# Return starting``    ``# address of array A``    ``return` `arr`` ` `# Driver code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``Str` `=` `"IDID"``    ``N ``=` `len``(``Str``)``    ``ptr ``=` `DiStirngMatch(``Str``)``     ` `    ``for` `i ``in` `range` `(N ``+` `1``):``        ``print``(ptr[i], end ``=` `" "``)`` ` `# This code is contributed by chitranayal`

## C#

 `// C# program to generate an increasing``// and decreasing array``using` `System;`` ` `class` `GFG{`` ` `// Function that returns generated array``static` `int` `[]DiStirngMatch(String Str)``{``    ``int` `N = Str.Length;`` ` `    ``// Dynamically allocate array``    ``int` `[]arr = ``new` `int``[N + 1];`` ` `    ``// START=0, END=N``    ``int` `START = 0, END = N;`` ` `    ``// Iterate over array``    ``for``(``int` `i = 0; i < N; i++)``    ``{``         ` `        ``// if Str[i]=='I' assign arr[i]``        ``// as START and increment START``        ``if` `(Str[i] == ``'I'``)``            ``arr[i] = START++;`` ` `        ``// if str[i]=='D' assign arr[i]``        ``// as END and decrement END``        ``if` `(Str[i] == ``'D'``)``            ``arr[i] = END--;``    ``}`` ` `    ``// Assign A[N] as START``    ``arr[N] = START;`` ` `    ``// Return starting``    ``// address of array A``    ``return` `arr;``}`` ` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``String Str = ``"IDID"``;``    ``int` `N = Str.Length;``    ``int``[] ptr = DiStirngMatch(Str);``     ` `    ``for``(``int` `i = 0; i <= N; i++)``        ``Console.Write(ptr[i] + ``" "``);``}``}`` ` `// This code is contributed by amal kumar choubey`
Output:
```0 4 1 3 2
```

Time Complexity: O (N)
Auxiliary Space: O (N)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up