Open In App

Generate a Sequence by inserting positions into Array based on corresponding String value

Last Updated : 24 Mar, 2022
Suggest changes
Share
Like Article
Like
Report

Given a string S of length N. The string consists only of letters 'F' and 'B'. The task is to generate a sequence performing some operations such that:

  • Consider an integer sequence A that consists of only a 0, i.e. A = (0).
  • Now, for each index(i) of the string (1 to N), if S[i] is 'F' add i to the immediate front (i.e. left side) of i-1 in sequence A
  • Else if S[i] is 'B' add i to the immediate back (i.e. right side) of i-1 sequence A.
  • Print the resultant sequence A.

Examples :

Input: N = 5, S = "FBBFB"
Output: 1 2 4 5 3 0
Explanation: Initially, A = {0}.
S[1] is 'F' , sequence becomes {1, 0}
S[2] is 'B' , sequence becomes {1, 2, 0}
S[3] is 'B' , sequence becomes {1, 2, 3, 0}
S[4] is 'F' , sequence becomes {1, 2, 4, 3, 0}
S[5] is 'B' , sequence becomes {1, 2, 4, 5, 3, 0}

Input : N = 6 , S = "BBBBBB"
Output : 0 1 2 3 4 5 6

 

Approach: The idea to solve the problem is based on the concept dequeue. 

As at each iteration, it is possible that insertion of i may occur from any end of (i-1), therefore deque can be used as in dequeue insertion is possible from any end. 

Follow the steps for the solution:

  • The observation in the approach is that the problem becomes more simple after inverting all the operations.
  • The problem now modifies to, a given sequence that consists of only (N), and after each iteration from the end of the string,
    • If S[i] is 'F', push i to the right of i-1,
    • If S[i] is 'B', push i to the left of i-1 in the dequeue.
  • Return the elements of dequeue in the order from the front end.

Below is the implementation of the above approach.

C++
// C++ program for above approach #include <bits/stdc++.h> using namespace std; // Function to find sequence // from given string  // according to given rule void findSequence(int N, string S) {  // Creating a deque  deque<int> v;  // Inserting N (size of string) into deque  v.push_back(N);  // Iterating string from behind and  // pushing the indices into the deque  for (int i = N - 1; i >= 0; i--) {  // If letter at current index is 'F',  // push i to the right of i-1  if (S[i] == 'F') {  v.push_back(i);  }  // If letter at current index is 'B',  // push i to the left of i-1  else {  v.push_front(i);  }  }  // Printing resultant sequence  for (int i = 0; i <= N; i++)  cout << v[i] << " "; } // Driver Code int main() {  int N = 5;  string S = "FBBFB";  // Printing the sequence  findSequence(N, S);  return 0; } 
Java
// JAVA program for above approach import java.util.*; class GFG {  // Function to find sequence  // from given string  // according to given rule  public static void findSequence(int N, String S)  {  // Creating a deque  Deque<Integer> v = new ArrayDeque<Integer>();  // Inserting N (size of string) into deque  v.addLast(N);  // Iterating string from behind and  // pushing the indices into the deque  for (int i = N - 1; i >= 0; i--) {  // If letter at current index is 'F',  // push i to the right of i-1  if (S.charAt(i) == 'F') {  v.addLast(i);  }  // If letter at current index is 'B',  // push i to the left of i-1  else {  v.addFirst(i);  }  }  // Printing resultant sequence  for (Iterator itr = v.iterator(); itr.hasNext();) {  System.out.print(itr.next() + " ");  }  }  // Driver Code  public static void main(String[] args)  {  int N = 5;  String S = "FBBFB";  // Printing the sequence  findSequence(N, S);  } } // This code is contributed by Taranpreet 
Python3
# Python program for above approach from collections import deque # Function to find sequence # from given string # according to given rule def findSequence(N, S): # Creating a deque v = deque() # Inserting N (size of string) into deque v.append(N) # Iterating string from behind and # pushing the indices into the deque i = N - 1 while(i >= 0): # If letter at current index is 'F', # push i to the right of i-1 if (S[i] == 'F'): v.append(i) # If letter at current index is 'B', # push i to the left of i-1 else: v.appendleft(i) i -= 1 # Printing resultant sequence print(*v) # Driver Code N = 5 S = "FBBFB" # Printing the sequence findSequence(N, S) # This code is contributed by Samim Hossain Mondal. 
C#
// C# program for above approach using System; using System.Collections.Generic; public class GFG {  // Function to find sequence  // from given string  // according to given rule  public static void findSequence(int N, String S)  {  // Creating a deque  List<int> v = new List<int>();  // Inserting N (size of string) into deque  v.Add(N);  // Iterating string from behind and  // pushing the indices into the deque  for (int i = N - 1; i >= 0; i--) {  // If letter at current index is 'F',  // push i to the right of i-1  if (S[i] == 'F') {  v.Add(i);  }  // If letter at current index is 'B',  // push i to the left of i-1  else {  v.Insert(0,i);  }  }  // Printing resultant sequence  foreach (int itr in v) {  Console.Write(itr + " ");  }  }  // Driver Code  public static void Main(String[] args)  {  int N = 5;  String S = "FBBFB";  // Printing the sequence  findSequence(N, S);  } } // This code is contributed by 29AjayKumar  
JavaScript
 <script>  // JavaScript program for above approach  // Function to find sequence  // from given string  // according to given rule  const findSequence = (N, S) => {  // Creating a deque  let v = [];  // Inserting N (size of string) into deque  v.push(N);  // Iterating string from behind and  // pushing the indices into the deque  for (let i = N - 1; i >= 0; i--) {  // If letter at current index is 'F',  // push i to the right of i-1  if (S[i] == 'F') {  v.push(i);  }  // If letter at current index is 'B',  // push i to the left of i-1  else {  v.unshift(i);  }  }  // Printing resultant sequence  for (let i = 0; i <= N; i++)  document.write(`${v[i]} `);  }  // Driver Code  let N = 5;  let S = "FBBFB";  // Printing the sequence  findSequence(N, S);  // This code is contributed by rakeshsahni  </script> 

 
 


Output
1 2 4 5 3 0 


 

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


 


Next Article

Similar Reads