Count the number of vowels occurring in all the substrings of given string
Given a string of length N of lowercase characters containing 0 or more vowels, the task is to find the count of vowels occurred in all the substrings of the given string.
Examples:
Input: str = “abc”
Output: 3
The given string “abc” contains only one vowel = ‘a’
Substrings of “abc” are = {“a”, “b”, “c”, “ab”, “bc, “abc”}
Hence, the sum of occurrences of the vowel in these strings = 3.(‘a’ occurred 3 times)Input: str = “daceh”
Output: 16
Naive Approach: Given a string of length N, the number of substrings that can be formed=N(N+1)/2. A simple solution is for each substring, we count the occurrences of the vowels and add them to get the result. The time complexity of this approach is O(N3) which is not suitable for large values of N.
Efficient Approach: The idea is to use a prefix sum array-based technique where we store the occurrences of each character in all the substrings concatenated.
- For the first character,
no. of occurrences = no. of substrings starting with the first character = N.
- For each of the following characters, we store the
no. of substrings starting with that character + the number of substrings formed by the previous characters containing this character – the number of substrings formed by the previous characters only.
Below is the implementation of the above approach:
C++
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; // Returns the total sum of // occurrences of all vowels int vowel_calc(string s) { int n = s.length(); vector< int > arr; for ( int i = 0; i < n; i++) { if (i == 0) // No. of occurrences of 0th character // in all the substrings arr.push_back(n); else // No. of occurrences of the ith character // in all the substrings arr.push_back((n - i) + arr[i - 1] - i); } int sum = 0; for ( int i = 0; i < n; i++) // Check if ith character is a vowel if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u' ) sum += arr[i]; // Return the total sum // of occurrences of vowels return sum; } // Driver code int main() { string s = "daceh" ; cout << vowel_calc(s) << endl; return 0; } |
Java
// Java implementation of the above approach import java.io.*; import java.util.*; public class Gfg { // Returns the total sum of // occurrences of all vowels static int vowel_calc(String s) { int n = s.length(); int arr[] = new int [n]; for ( int i = 0 ; i < n; i++) { if (i == 0 ) // No. of occurrences of 0th character // in all the substrings arr[i] = n; else // No. of occurrences of ith character // in all the substrings arr[i] = (n - i) + arr[i - 1 ] - i; } int sum = 0 ; for ( int i = 0 ; i < n; i++) { char ch = s.charAt(i); // Check if ith character is a vowel if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ) sum += arr[i]; } // Return the total sum // of occurences of vowels return sum; } // Driver Code public static void main(String args[]) { String s = "daceh" ; System.out.println(vowel_calc(s)); } } |
Python3
# Python 3 implementation of the # above approach # Returns the total sum of # occurrences of all vowels def vowel_calc(s): n = len (s) arr = [] for i in range ( 0 , n, 1 ): if (i = = 0 ): # No. of occurrences of 0th # character in all the substrings arr.append(n) else : # No. of occurrences of the ith # character in all the substrings arr.append((n - i) + arr[i - 1 ] - i) sum = 0 for i in range ( 0 , n, 1 ): # Check if ith character is a vowel if (s[i] = = 'a' or s[i] = = 'e' or s[i] = = 'i' or s[i] = = 'o' or s[i] = = 'u' ): sum + = arr[i] # Return the total sum # of occurrences of vowels return sum # Driver code if __name__ = = '__main__' : s = "daceh" print (vowel_calc(s)) # This code is contributed by # Surendra_Gangwar |
C#
// C# implementation of the above approach using System; public class Gfg { // Returns the total sum of // occurrences of all vowels static int vowel_calc( string s) { int n = s.Length; int [] arr = new int [n]; for ( int i = 0; i < n; i++) { if (i == 0) // No. of occurrences of 0th character // in all the substrings arr[i] = n; else // No. of occurrences of ith character // in all the substrings arr[i] = (n - i) + arr[i - 1] - i; } int sum = 0; for ( int i = 0; i < n; i++) { char ch = s[i]; // Check if ith character is a vowel if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ) sum += arr[i]; } // Return the total sum // of occurences of vowels return sum; } // Driver Code public static void Main() { string s = "daceh" ; Console.Write(vowel_calc(s)); } } |
PHP
<?php // PHP implementation of the above approach // Returns the total sum of // occurrences of all vowels function vowel_calc( $s ) { $n = strlen ( $s ); $arr = array (); for ( $i = 0; $i < $n ; $i ++) { if ( $i == 0) // No. of occurrences of 0th character // in all the substrings $arr [ $i ] = $n ; else // No. of occurrences of ith character // in all the substrings $arr [ $i ] = ( $n - $i ) + $arr [ $i - 1] - $i ; } $sum = 0; for ( $i = 0; $i < $n ; $i ++) { // Check if ith character is a vowel if ( $s [ $i ] == 'a' || $s [ $i ] == 'e' || $s [ $i ] == 'i' || $s [ $i ] == 'o' || $s [ $i ] == 'u' ) $sum += $arr [ $i ]; } // Return the total sum // of occurences of vowels return $sum ; } // Driver Code $s = "daceh" ; echo (vowel_calc( $s )); // This code is contributed by Shivi_Aggarwal ?> |
16
Time Complexity: O(N)
Recommended Posts:
- Queries to find the count of vowels in the substrings of the given string
- Count substrings with each character occurring at most k times
- Count substrings that contain all vowels | SET 2
- Python program to count number of vowels using sets in given string
- Given a binary string, count number of substrings that start and end with 1.
- Count number of substrings of a string consisting of same characters
- Check whether all the substrings have number of vowels atleast as that of consonants
- Count the pairs of vowels in the given string
- Program to count vowels in a string (Iterative and Recursive)
- Count of substrings of a binary string containing K ones
- Program to count vowels, consonant, digits and special characters in string.
- Find substrings that contain all vowels
- Count of distinct substrings of a string using Suffix Trie
- Count of distinct substrings of a string using Suffix Array
- Count Substrings with equal number of 0s, 1s and 2s
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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.