Given a string of length N of lowercase characters containing 0 or more vowels, the task is to find the count of vowels that occurred in all the substrings of the given string.

**Examples:**

Input:str = “abc”

Output:3The 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(N^{3}) 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; ` `} ` |

*chevron_right*

*filter_none*

## 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 occurrences of vowels ` ` ` `return` `sum; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `main(String args[]) ` ` ` `{ ` ` ` `String s = ` `"daceh"` `; ` ` ` `System.out.println(vowel_calc(s)); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python 3 implementation of ` `# a more efficient approach. ` `# return sum of all occurrences of all vowels ` `def` `sumVowel(string): ` ` ` `n ` `=` `len` `(string) ` ` ` `sum` `=` `0` ` ` `string ` `=` `string.lower() ` ` ` ` ` `# iterate through every character in the string ` ` ` `for` `i ` `in` `range` `(` `0` `, n): ` ` ` `s ` `=` `string[i] ` ` ` ` ` `# checks if the character is a vowel or not ` ` ` `if` `(s` `=` `=` `"a"` `or` `s ` `=` `=` `"e"` `or` `s ` `=` `=` `"i"` `or` `s ` `=` `=` `"o"` `or` `s ` `=` `=` `"u"` `): ` ` ` ` ` `# uses below expression to calculate the count ` ` ` `# of all occurrences of character in substrings ` ` ` `# of the string ` ` ` `sum` `+` `=` `((n ` `-` `i) ` `*` `(i ` `+` `1` `)) ` ` ` ` ` `# return the total sum of occurrence ` ` ` `return` `sum` ` ` `#driver code ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `#input string here ` ` ` `string ` `=` `"abhay"` ` ` `#print returned sum ` ` ` `print` `(sumVowel(string)) ` ` ` `# This code is contributed by ` `# Abhay Subramanian K ` |

*chevron_right*

*filter_none*

## 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 occurrences of vowels ` ` ` `return` `sum; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `string` `s = ` `"daceh"` `; ` ` ` `Console.Write(vowel_calc(s)); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## 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 occurrences of vowels ` ` ` `return` `$sum` `; ` ` ` `} ` ` ` `// Driver Code ` `$s` `= ` `"daceh"` `; ` `echo` `(vowel_calc(` `$s` `)); ` ` ` `// This code is contributed by Shivi_Aggarwal ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

16

**Time Complexity:** O(N)

## Recommended Posts:

- Count of Distinct Substrings occurring consecutively in a given String
- Queries to find the count of vowels in the substrings of the given string
- Count substrings that contain all vowels | SET 2
- Count substrings with each character occurring at most k times
- Count of substrings consisting of even number of vowels
- Check whether all the substrings have number of vowels atleast as that of consonants
- Find the number of words of X vowels and Y consonants that can be formed from M vowels and N consonants
- Count of substrings consisting only of vowels
- Find substrings that contain all vowels
- Python program to count number of vowels using sets in given string
- Count of substrings of a given Binary string with all characters same
- Generate a string whose all K-size substrings can be concatenated to form the given string
- Count the pairs of vowels in the given string
- Minimum swaps required to move all vowels occurs after consonants in a given string
- Minimize cost to replace all the vowels of a given String by a single vowel
- Given a binary string, count number of substrings that start and end with 1.
- Frequency of maximum occurring subsequence in given string
- Count ways to split a Binary String into three substrings having equal count of zeros
- Check if all substrings of length K of a Binary String has equal count of 0s and 1s
- Minimum number of substrings the given string can be splitted into that satisfy the given conditions

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.

**Improved By :**SouravAChowdhury_97, SURENDRA_GANGWAR, chitranayal, Shivi_Aggarwal, AbhaySubramanian, more