# Count all substrings having character K

Given a string str and a character K, the task is to find the count of all the substrings of str that contain the character K.

Examples:

Input: str = “geeks”, K = ‘g’
Output: 5
“g”, “ge”, “gee”, “geek” and “geeks” are the valid substrings.

Input: str = “geeksforgeeks”, K = ‘k’
Output: 56

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

Naive approach A simple approach will be to find all the substrings having character K of the given string and return the count;

Efficient approach: For every index i in the string, find the first index j such that i ≤ j and str[j] = K. Now, the substrings str[i…j], str[i…j + 1], str[i…j + 2], …, str[i…n – 1] will all contain the character K at least once. The approach seems to be O(n2) at first but the index j will not be calculated again for every index i, j will be a valid index for all the values of i less than j.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the index of the ` `// next occurrence of character ch in str ` `// starting from the given index ` `int` `nextOccurrence(string str, ``int` `n, ` `                   ``int` `start, ``char` `ch) ` `{ ` `    ``for` `(``int` `i = start; i < n; i++) { ` ` `  `        ``// Return the index of the first ` `        ``// occurrence of ch ` `        ``if` `(str[i] == ch) ` `            ``return` `i; ` `    ``} ` ` `  `    ``// No occurrence found ` `    ``return` `-1; ` `} ` ` `  `// Function to return the count of all ` `// the substrings of str which contain ` `// the character ch at least one ` `int` `countSubStr(string str, ``int` `n, ``char` `ch) ` `{ ` ` `  `    ``// To store the count of valid substrings ` `    ``int` `cnt = 0; ` ` `  `    ``// Index of the first occurrence of ch in str ` `    ``int` `j = nextOccurrence(str, n, 0, ch); ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``while` `(j != -1 && j < i) { ` `            ``j = nextOccurrence(str, n, j + 1, ch); ` `        ``} ` ` `  `        ``// No occurrence of ch after index i in str ` `        ``if` `(j == -1) ` `            ``break``; ` ` `  `        ``// Substrings starting at index i ` `        ``// and ending at indices j, j+1, ..., n-1 ` `        ``// are all valid substring ` `        ``cnt += (n - j); ` `    ``} ` ` `  `    ``return` `cnt; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``string str = ``"geeksforgeeks"``; ` `    ``int` `n = str.length(); ` `    ``char` `ch = ``'k'``; ` ` `  `    ``cout << countSubStr(str, n, ch); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to return the index of the  ` `    ``// next occurrence of character ch in str  ` `    ``// starting from the given index  ` `    ``static` `int` `nextOccurrence(String str, ``int` `n,  ` `                              ``int` `start, ``char` `ch)  ` `    ``{  ` `        ``for` `(``int` `i = start; i < n; i++)  ` `        ``{  ` `     `  `            ``// Return the index of the first  ` `            ``// occurrence of ch  ` `            ``if` `(str.charAt(i) == ch)  ` `                ``return` `i;  ` `        ``}  ` `     `  `        ``// No occurrence found  ` `        ``return` `-``1``;  ` `    ``}  ` `     `  `    ``// Function to return the count of all  ` `    ``// the substrings of str which contain  ` `    ``// the character ch at least one  ` `    ``static` `int` `countSubStr(String str,  ` `                           ``int` `n, ``char` `ch)  ` `    ``{  ` `     `  `        ``// To store the count of valid substrings  ` `        ``int` `cnt = ``0``;  ` `     `  `        ``// Index of the first occurrence of ch in str  ` `        ``int` `j = nextOccurrence(str, n, ``0``, ch);  ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{  ` `            ``while` `(j != -``1` `&& j < i) ` `            ``{  ` `                ``j = nextOccurrence(str, n, j + ``1``, ch);  ` `            ``}  ` `     `  `            ``// No occurrence of ch after index i in str  ` `            ``if` `(j == -``1``)  ` `                ``break``;  ` `     `  `            ``// Substrings starting at index i  ` `            ``// and ending at indices j, j+1, ..., n-1  ` `            ``// are all valid substring  ` `            ``cnt += (n - j);  ` `        ``}  ` `        ``return` `cnt;  ` `    ``}  ` `     `  `    ``// Driver code  ` `    ``static` `public` `void` `main ( String []arg) ` `    ``{  ` `        ``String str = ``"geeksforgeeks"``;  ` `        ``int` `n = str.length();  ` `        ``char` `ch = ``'k'``;  ` `         `  `        ``System.out.println(countSubStr(str, n, ch));  ` `    ``}  ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

## Python3

 `# Python3 implementation of the approach ` ` `  `# Function to return the index of the ` `# next occurrence of character ch in strr ` `# starting from the given index ` `def` `nextOccurrence(strr, n, start, ch): ` `    ``for` `i ``in` `range``(start, n): ` ` `  `        ``# Return the index of the first ` `        ``# occurrence of ch ` `        ``if` `(strr[i] ``=``=` `ch): ` `            ``return` `i ` ` `  `    ``# No occurrence found ` `    ``return` `-``1` ` `  `# Function to return the count of all ` `# the substrrings of strr which contain ` `# the character ch at least one ` `def` `countSubStr(strr, n, ch): ` ` `  `    ``# To store the count of valid substrrings ` `    ``cnt ``=` `0` ` `  `    ``# Index of the first occurrence of ch in strr ` `    ``j ``=` `nextOccurrence(strr, n, ``0``, ch) ` ` `  `    ``for` `i ``in` `range``(n): ` `        ``while` `(j !``=` `-``1` `and` `j < i): ` `            ``j ``=` `nextOccurrence(strr, n, j ``+` `1``, ch) ` ` `  `        ``# No occurrence of ch after index i in strr ` `        ``if` `(j ``=``=` `-``1``): ` `            ``break` ` `  `        ``# Substrrings starting at index i ` `        ``# and ending at indices j, j+1, ..., n-1 ` `        ``# are all valid substrring ` `        ``cnt ``+``=` `(n ``-` `j) ` ` `  `    ``return` `cnt ` ` `  `# Driver code ` `strr ``=` `"geeksforgeeks"` `n ``=` `len``(strr) ` `ch ``=` `'k'` ` `  `print``(countSubStr(strr, n, ch)) ` ` `  `# This code is contributed by Mohit Kumar `

## C#

 `// C# implementation of the approach  ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to return the index of the  ` `    ``// next occurrence of character ch in str  ` `    ``// starting from the given index  ` `    ``static` `int` `nextOccurrence(String str, ``int` `n,  ` `                               ``int` `start, ``char` `ch)  ` `    ``{  ` `        ``for` `(``int` `i = start; i < n; i++)  ` `        ``{  ` `     `  `            ``// Return the index of the first  ` `            ``// occurrence of ch  ` `            ``if` `(str[i] == ch)  ` `                ``return` `i;  ` `        ``}  ` `     `  `        ``// No occurrence found  ` `        ``return` `-1;  ` `    ``}  ` `     `  `    ``// Function to return the count of all  ` `    ``// the substrings of str which contain  ` `    ``// the character ch at least one  ` `    ``static` `int` `countSubStr(String str,  ` `                           ``int` `n, ``char` `ch)  ` `    ``{  ` `     `  `        ``// To store the count of valid substrings  ` `        ``int` `cnt = 0;  ` `     `  `        ``// Index of the first occurrence of ch in str  ` `        ``int` `j = nextOccurrence(str, n, 0, ch);  ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{  ` `            ``while` `(j != -1 && j < i) ` `            ``{  ` `                ``j = nextOccurrence(str, n, j + 1, ch);  ` `            ``}  ` `     `  `            ``// No occurrence of ch after index i in str  ` `            ``if` `(j == -1)  ` `                ``break``;  ` `     `  `            ``// Substrings starting at index i  ` `            ``// and ending at indices j, j+1, ..., n-1  ` `            ``// are all valid substring  ` `            ``cnt += (n - j);  ` `        ``}  ` `        ``return` `cnt;  ` `    ``}  ` `     `  `    ``// Driver code  ` `    ``static` `public` `void` `Main ()  ` `    ``{  ` `        ``String str = ``"geeksforgeeks"``;  ` `        ``int` `n = str.Length;  ` `        ``char` `ch = ``'k'``;  ` `         `  `        ``Console.WriteLine(countSubStr(str, n, ch));  ` `    ``}  ` `} ` ` `  `// This code is contributed by AnkitRai01 `

Output:

```56
```

My Personal Notes arrow_drop_up I am javascript enthusiast, Founder, Writer and educator at learnersbucketcom

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.