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)