Saturday, November 16, 2024
Google search engine
HomeData Modelling & AIContiguous subsegments of a string having distinct subsequent characters

Contiguous subsegments of a string having distinct subsequent characters

Given string str of length L and an integer N, the task is to form a total of (L / N) contiguous sub-segments of the string which contain distinct subsequent characters. 
Note: that the integer N will be a factor of the length of the string i.e L.
Examples: 

Input: str = “neveropengfg”, N = 4 
Output: 
gek 
sfor 
gek 
sgf 
The length of “neveropengfg” is 16, therefore there will be 4 subsegments. 
The first subsegment will contain the characters g, e, e and k but the alphabet ‘e’ is repeated, 
So we discard one ‘e’. Therefore, the final subsegment will be “gek”. 
Similarly, the other three subsegments will be “sfor”, “gek” and “sgf”. 
Each subsegment should have subsequent distinct characters.

Input: str = “aabdekfgf”, N = 3 
Output: 
ab 
dek
fg 

Approach: An array is created every time the iteration is started over the new sub segment. Those elements are stored in a sequence in that array. If any element already exists in the array, then it is not pushed into the array.
Below is the implementation of the above approach: 

CPP




// C++ implementation of the approach
#include<bits/stdc++.h>
using namespace std;
 
// Function that prints the segments
void sub_segments(string str, int n)
{
    int l = str.length();
    for (int x = 0; x < l; x += n)
    {
        string newlist = str.substr(x, n);
         
        // New array for every iteration
        list<char> arr;
 
        // Iterator for new array
        list<char>::iterator it;
 
        for(auto y:newlist)
        {
            it = find(arr.begin(), arr.end(), y);
             
            // Check if iterator points to end or not
            if(it == arr.end())
                arr.push_back(y);
        }
 
        for(auto y:arr)
            cout << y;
        cout << endl;
    }
}
 
// Driver code
int main()
{
    string str = "neveropengfg";
    int n = 4;
    sub_segments(str, n);
}
 
// This code is contributed by Sanjit_Prasad


Java




// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
// Function that prints the segments
static void sub_segments(String str, int n)
{
    int l = str.length();
    for (int x = 0; x < l; x += n)
    {
        String newlist = str.substring(x, x + n);
 
        // New array for every iteration
        List<Character> arr = new ArrayList<Character>();
        for (char y : newlist.toCharArray())
        {
 
            // Check if the character is in the array
            if (!arr.contains(y))
                arr.add(y);
        }
        for (char y : arr)
            System.out.print(y);
        System.out.println();
    }
}
 
// Driver code
public static void main(String[] args)
{
    String str = "neveropengfg";
    int n = 4;
    sub_segments(str, n);
}
}
 
// This code is contributed by Rajput-Ji


Python3




# Python3 implementation of the approach
 
# Function that prints the segments
def sub_segments (string, n):
    l = len (string)
    for x in range (0, l, n):
        newlist = string[x : x + n]
 
        # New array for every iteration
        arr = []
        for y in newlist:
 
           # Check if the character is in the array
            if y not in arr:
                arr.append (y)
        
        print (''.join (arr))
 
# Driver code
string = "neveropengfg"
n = 4
sub_segments (string, n)


C#




// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Function that prints the segments
static void sub_segments(String str, int n)
{
    int l = str.Length;
    for (int x = 0; x < l; x += n)
    {
        String newlist = str.Substring(x, n);
 
        // New array for every iteration
        List<char> arr = new List<char>();
        foreach (char y in newlist.ToCharArray())
        {
 
            // Check if the character is in the array
            if (!arr.Contains(y))
                arr.Add(y);
        }
        foreach (char y in arr)
            Console.Write(y);
        Console.WriteLine();
    }
}
 
// Driver code
public static void Main(String[] args)
{
    String str = "neveropengfg";
    int n = 4;
    sub_segments(str, n);
}
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
// Javascript implementation of the approach
 
 
// Function that prints the segments
function sub_segments(str, n) {
    let l = str.length;
    for (let x = 0; x < l; x += n) {
        let newlist = str.substr(x, n);
 
        // New array for every iteration
        let arr = [];
 
        for (let y of newlist) {
 
            // Check if the character is in the array
            if (!arr.includes(y))
                arr.push(y);
        }
        for (let y of arr)
            document.write(y);
        document.write("<br>");
    }
}
 
// Driver code
 
let str = "neveropengfg";
let n = 4;
sub_segments(str, n);
 
// This code is contributed by gfgking
 
</script>


Output

gek
sfor
gek
sgf

Time Complexity: O(L), Here L is the length of the string.
Auxiliary Space: O(n), The extra space is used to store the substrings.

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments