Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Generate a sequence with the given operations

  • Difficulty Level : Easy
  • Last Updated : 14 May, 2021

Given a string S  which contains only I  (increase) and D  (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: 
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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



 

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

C++




//C++ Implementation of above approach
#include<bits/stdc++.h>
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<len;x++)
    {
        if (s[x] == 'I')
        {
            ans.push_back(lo) ;
            lo += 1;
            }
        else
        {
            ans.push_back(hi) ;
            hi -= 1;
            }
    }
            ans.push_back(lo) ;
    cout<<"[";
    for(int i=0;i<ans.size();i++)
    {
    cout<<ans[i];
    if(i!=ans.size()-1)
    cout<<",";
    }
    cout<<"]";
}
// Driver code
int main()
{
string S = "IDID";
StringMatch(S);
return 0;
}
//contributed by Arnab Kundu

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<Integer> 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




<script>
 
// Javascript implementation of above approach
 
// function to find minimum required permutation
    function  StringMatch(s)
    {
    var lo=0, hi = s.length, len=s.length;
    var ans=[];
    for (var x=0;x<len;x++)
    {
        if (s[x] == 'I')
        {
            ans.push(lo) ;
            lo += 1;
            }
        else
        {
            ans.push(hi) ;
            hi -= 1;
            }
    }
            ans.push(lo) ;
    document.write("[");
    for(var i=0;i<ans.length;i++)
    {
     document.write(ans[i]);
    if(i!=ans.length -1)
     document.write(", ");
    }
     document.write("]");
}
 
var S = "IDID";
StringMatch(S);
 
 
// This code is contributed by SoumikMondal
 
</script>
Output: 
[0, 4, 1, 3, 2]

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!