# 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 that 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;` `}` |

## 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));` ` ` `}` `}` |

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

## 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));` ` ` `}` `}` |

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

## Javascript

`<script>` `// Javascript implementation of the above approach` `// Returns the total sum of` `// occurrences of all vowels` `function` `vowel_calc(s)` `{` ` ` `var` `n = s.length;` ` ` `var` `arr = [];` ` ` `for` `(` `var` `i = 0; i < n; i++) {` ` ` `if` `(i == 0)` ` ` `// No. of occurrences of 0th character` ` ` `// in all the substrings` ` ` `arr.push(n);` ` ` `else` ` ` `// No. of occurrences of the ith character` ` ` `// in all the substrings` ` ` `arr.push((n - i) + arr[i - 1] - i);` ` ` `}` ` ` `var` `sum = 0;` ` ` `for` `(` `var` `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` `var` `s = ` `"daceh"` `;` `document.write( vowel_calc(s));` `// This code is contributed by importantly.` `</script>` |

**Output:**

16

**Time Complexity:** O(N)