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(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 occurences 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*

**Output:**

16

**Time Complexity:** O(N)

## Recommended Posts:

- Count substrings with each character occurring at most k times
- 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.
- 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
- Number of substrings with count of each character as k
- Count number of substrings with numeric value greater than X
- Count number of substrings with exactly k distinct characters
- Number of substrings of a string
- Number of even substrings in a string of digits

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.