# 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ` `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

 ` `

Output:

```16
```

Time Complexity: O(N)

My Personal Notes arrow_drop_up 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.