Find substrings that contain all vowels

We have been given a string in lowercase alphabets. We need to print substrings that contain all the vowels at-least one time and there are no consonants (non-vowel characters) present in the substrings.

Examples:

Input : str = aeoibddaeoiud
Output : aeoiu

Input : str = aeoibsddaeiouudb
Output : aeiou, aeiouu

Reference :- Samsung Interview Questions.



We use a hashing based technique and start traversing the string from the start. For every character, we consider all substrings starting from it. If we encounter a consonant, we move to next starting character. Else, we insert current character in a hash. If all vowels are included, we print current substring.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find all substring that 
// contain all vowels
#include <bits/stdc++.h>
  
using namespace std;
  
// Returns true if x is vowel.
bool isVowel(char x)
{
    // Function to check whether a character is
    // vowel or not
    return (x == 'a' || x == 'e' || x == 'i' ||
                        x == 'o' || x == 'u');
}
  
void FindSubstring(string str)
{
    set<char> hash; // To store vowels
  
    // Outer loop picks starting character and 
    // inner loop picks ending character.
    int n = str.length();
    for (int i = 0; i < n; i++) {
       for (int j = i; j < n; j++) {
  
            // If current character is not vowel,
            // then no more result substrings 
            // possible starting from str[i].
            if (isVowel(str[j]) == false)
              break;
  
            // If vowel, then we insert it in hash              
            hash.insert(str[j]);
  
            // If all vowels are present in current
            // substring
            if (hash.size() == 5)
                cout << str.substr(i, j-i+1) << " ";
        }
  
        hash.clear();
    }
}
  
// Driver code
int main()
{
    string str = "aeoibsddaeiouudb";
    FindSubstring(str);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find all substring that  
// contain all vowels 
import java.util.HashSet;
  
public class GFG {
  
    // Returns true if x is vowel.
    static boolean isVowel(char x) {
        // Function to check whether a character is
        // vowel or not
        return (x == 'a' || x == 'e' || x == 'i' 
                || x == 'o' || x == 'u');
    }
  
    static void findSubstring(String str) {
        HashSet<Character> hash = new HashSet<Character>(); 
            // To store vowels
  
        // Outer loop picks starting character and
        // inner loop picks ending character.
        int n = str.length();
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
  
                // If current character is not vowel,
                // then no more result substrings
                // possible starting from str[i].
                if (isVowel(str.charAt(j)) == false)
                    break;
  
                // If vowel, then we insert it in hash
                hash.add(str.charAt(j));
  
                // If all vowels are present in current
                // substring
                if (hash.size() == 5)
                    System.out.print(str.substring(i, j + 1) + " ");
            }
            hash.clear();
        }
    }
  
    // Driver code
    public static void main(String[] args) {
        String str = "aeoibsddaeiouudb";
        findSubstring(str);
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find all subthat
# contain all vowels
  
# Returns true if x is vowel.
def isVowel(x):
      
    # Function to check whether a character is
    # vowel or not
    if (x == 'a' or x == 'e' or x == 'i' or 
        x == 'o' or x == 'u'):
        return True
    return False
  
def FindSubstr1ing(str1):
  
    # To store vowels
  
    # Outer loop picks starting character and
    # inner loop picks ending character.
    n = len(str1)
    for i in range(n):
        hash = dict()
        for j in range(i, n):
  
            # If current character is not vowel,
            # then no more result substr1ings
            # possible starting from str1[i].
            if (isVowel(str1[j]) == False):
                break
  
            # If vowel, then we insert it in hash
            hash[str1[j]] = 1
  
            # If all vowels are present in current
            # substr1ing
            if (len(hash) == 5):
                print(str1[i:j + 1], end = " ")
  
# Driver code
str1 = "aeoibsddaeiouudb"
FindSubstr1ing(str1)
  
# This code is contributed by Mohit Kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find all substring that 
// contain all vowels 
using System;
using System.Collections.Generic;
  
public class GFG
{
  
// Returns true if x is vowel. 
public static bool isVowel(char x)
{
    // Function to check whether a 
    // character is vowel or not 
    return (x == 'a' || x == 'e' ||
            x == 'i' || x == 'o' || x == 'u');
}
  
public static void findSubstring(string str)
{
    HashSet<char> hash = new HashSet<char>();
      
    // To store vowels     
    // Outer loop picks starting character and 
    // inner loop picks ending character. 
    int n = str.Length;
    for (int i = 0; i < n; i++)
    {
        for (int j = i; j < n; j++)
        {
  
            // If current character is not vowel, 
            // then no more result substrings 
            // possible starting from str[i]. 
            if (isVowel(str[j]) == false)
            {
                break;
            }
  
            // If vowel, then we insert it in hash 
            hash.Add(str[j]);
  
            // If all vowels are present in current 
            // substring 
            if (hash.Count == 5)
            {
                Console.Write(str.Substring(i,      
                             (j + 1) - i) + " ");
            }
        }
        hash.Clear();
    }
}
  
// Driver code 
public static void Main(string[] args)
{
    string str = "aeoibsddaeiouudb";
    findSubstring(str);
}
}
  
// This code is contributed by Shrikant13

chevron_right



Output:

aeiou aeiouu

Time Complexity : O(n2)

Optimized Solution :
For every character, If current character is vowel then insert into hash. else set flag Start to next substring start from i+1th index. If all vowels are included, we print current substring.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find all substring that
// contain all vowels
#include<bits/stdc++.h>
  
using namespace std;
  
// Returns true if x is vowel.
bool isVowel(char x)
{
    // Function to check whether a character is
    // vowel or not
    return (x == 'a' || x == 'e' || x == 'i' ||
                        x == 'o' || x == 'u');
}
  
// Function to FindSubstrings of string
void FindSubstring(string str)
{
    set<char> hash;  // To store vowels
  
    int start = 0;
    for (int i=0; i<str.length(); i++)
    {
        // If current character is vowel then
        // insert into hash ,
        if (isVowel(str[i]) == true)
        {
            hash.insert(str[i]);
  
            // If all vowels are present in current
            // substring
            if (hash.size()==5)
                cout << str.substr(start, i-start+1)
                     << " ";
        }
        else
        {
            start = i+1;
            hash.clear();
        }
    }
}
  
// Driver Code
int main()
{
    string str = "aeoibsddaeiouudb";
    FindSubstring(str);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find all substring that  
// contain all vowels 
import java.util.HashSet;
  
public class GFG {
  
    // Returns true if x is vowel.
    static boolean isVowel(char x) {
        // Function to check whether a character is
        // vowel or not
        return (x == 'a' || x == 'e' || x == 'i' 
                || x == 'o' || x == 'u');
    }
  
    // Function to FindSubstrings of string
    static void findSubstring(String str) {
        HashSet<Character> hash = new HashSet<Character>();
        // To store vowels
  
        int start = 0;
        for (int i = 0; i < str.length(); i++) {
            // If current character is vowel then
            // insert into hash ,
            if (isVowel(str.charAt(i)) == true) {
                hash.add(str.charAt(i));
  
                // If all vowels are present in current
                // substring
                if (hash.size() == 5)
                    System.out.print(str.substring(start, i + 1) + " ");
            } else {
                start = i + 1;
                hash.clear();
            }
        }
    }
  
    // Driver Code
    public static void main(String[] args) {
        String str = "aeoibsddaeiouudb";
        findSubstring(str);
    }
  
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find all substring 
# that contain all vowels
  
# Returns true if x is vowel.
def isVowel(x):
      
    # Function to check whether 
    # a character is vowel or not
    return (x == 'a' or x == 'e' or 
            x == 'i' or x == 'o' or 
            x == 'u');
  
# Function to FindSubstrings of string
def FindSubstring(str):
  
    hash = set(); # To store vowels
  
    start = 0;
    for i in range(len(str)):
          
        # If current character is vowel 
        # then insert into hash
        if (isVowel(str[i]) == True):
            hash.add(str[i]);
  
            # If all vowels are present 
            # in current substring
            if (len(hash) == 5):
                print(str[start : i + 1], 
                              end = " ");
        else:
            start = i + 1;
            hash.clear();
  
# Driver Code
str = "aeoibsddaeiouudb";
FindSubstring(str);
  
# This code is contributed by 29AjayKumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

using System;
using System.Collections.Generic;
  
// c# program to find all substring that   
// contain all vowels  
  
public class GFG
{
  
    // Returns true if x is vowel. 
    public static bool isVowel(char x)
    {
        // Function to check whether a character is 
        // vowel or not 
        return (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u');
    }
  
    // Function to FindSubstrings of string 
    public static void findSubstring(string str)
    {
        HashSet<char> hash = new HashSet<char>();
        // To store vowels 
  
        int start = 0;
        for (int i = 0; i < str.Length; i++)
        {
            // If current character is vowel then 
            // insert into hash , 
            if (isVowel(str[i]) == true)
            {
                hash.Add(str[i]);
  
                // If all vowels are present in current 
                // substring 
                if (hash.Count == 5)
                {
                    Console.Write(str.Substring(start, (i + 1) - start) + " ");
                }
            }
            else
            {
                start = i + 1;
                hash.Clear();
            }
        }
    }
  
    // Driver Code 
    public static void Main(string[] args)
    {
        string str = "aeoibsddaeiouudb";
        findSubstring(str);
    }
  
}
  
// This code is contributed by Shrikant13

chevron_right



Output:

aeiou aeiouu

Thanks to Kriti Shukla for suggesting this optimized solution.

This article is contributed by Ashish Madaan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up