# Count all substrings having character K

• Last Updated : 25 Aug, 2021

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:
“g”, “ge”, “gee”, “geek” and “geeks” are the valid substrings.
Input: str = “geeksforgeeks”, K = ‘k’
Output: 56

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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 substrings of strr which contain``# the character ch at least one``def` `countSubStr(strr, n, ch):` `    ``# To store the count of valid substrings``    ``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` `        ``# 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``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`

## Javascript

 ``
Output:
`56`

My Personal Notes arrow_drop_up