# Find distinct characters in distinct substrings of a string

• Difficulty Level : Basic
• Last Updated : 07 Sep, 2021

Given a string str, the task is to find the count of distinct characters in all the distinct sub-strings of the given string.
Examples:

Input: str = “ABCA”
Output: 18

Hence, 1 + 2 + 3 + 3 + 1 + 2 + 3 + 1 + 2 = 18
Input: str = “AAAB”
Output: 10

Approach: Take all possible sub-strings of the given string and use a set to check whether the current sub-string has been processed before. Now, for every distinct sub-string, count the distinct characters in it (again set can be used to do so). The sum of this count for all the distinct sub-strings is the final answer.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the count of distinct``// characters in all the distinct``// sub-strings of the given string``int` `countTotalDistinct(string str)``{``    ``int` `cnt = 0;` `    ``// To store all the sub-strings``    ``set items;` `    ``for` `(``int` `i = 0; i < str.length(); ++i) {` `        ``// To store the current sub-string``        ``string temp = ``""``;` `        ``// To store the characters of the``        ``// current sub-string``        ``set<``char``> ans;``        ``for` `(``int` `j = i; j < str.length(); ++j) {``            ``temp = temp + str[j];``            ``ans.insert(str[j]);` `            ``// If current sub-string hasn't``            ``// been stored before``            ``if` `(items.find(temp) == items.end()) {` `                ``// Insert it into the set``                ``items.insert(temp);` `                ``// Update the count of``                ``// distinct characters``                ``cnt += ans.size();``            ``}``        ``}``    ``}` `    ``return` `cnt;``}` `// Driver code``int` `main()``{``    ``string str = ``"ABCA"``;` `    ``cout << countTotalDistinct(str);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``import` `java.util.HashSet;` `class` `geeks``{` `    ``// Function to return the count of distinct``    ``// characters in all the distinct``    ``// sub-strings of the given string``    ``public` `static` `int` `countTotalDistinct(String str)``    ``{``        ``int` `cnt = ``0``;` `        ``// To store all the sub-strings``        ``HashSet items = ``new` `HashSet<>();` `        ``for` `(``int` `i = ``0``; i < str.length(); ++i)``        ``{` `            ``// To store the current sub-string``            ``String temp = ``""``;` `            ``// To store the characters of the``            ``// current sub-string``            ``HashSet ans = ``new` `HashSet<>();``            ``for` `(``int` `j = i; j < str.length(); ++j)``            ``{``                ``temp = temp + str.charAt(j);``                ``ans.add(str.charAt(j));` `                ``// If current sub-string hasn't``                ``// been stored before``                ``if` `(!items.contains(temp))``                ``{` `                    ``// Insert it into the set``                    ``items.add(temp);` `                    ``// Update the count of``                    ``// distinct characters``                    ``cnt += ans.size();``                ``}``            ``}``        ``}` `        ``return` `cnt;``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"ABCA"``;``        ``System.out.println(countTotalDistinct(str));``    ``}``}` `// This code is contributed by``// sanjeev2552`

## Python3

 `# Python3 implementation of the approach` `# Function to return the count of distinct``# characters in all the distinct``# sub-strings of the given string``def` `countTotalDistinct(string) :` `    ``cnt ``=` `0``;` `    ``# To store all the sub-strings``    ``items ``=` `set``();` `    ``for` `i ``in` `range``(``len``(string)) :` `        ``# To store the current sub-string``        ``temp ``=` `"";` `        ``# To store the characters of the``        ``# current sub-string``        ``ans ``=` `set``();``        ``for` `j ``in` `range``(i, ``len``(string)) :``            ``temp ``=` `temp ``+` `string[j];``            ``ans.add(string[j]);` `            ``# If current sub-string hasn't``            ``# been stored before``            ``if` `temp ``not` `in` `items :` `                ``# Insert it into the set``                ``items.add(temp);` `                ``# Update the count of``                ``# distinct characters``                ``cnt ``+``=` `len``(ans);` `    ``return` `cnt;`  `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``string ``=` `"ABCA"``;` `    ``print``(countTotalDistinct(string));``    ` `# This code is contributed by AnkitRai01`

## C#

 `// C# implementation of the approach``using` `System;``using` `System.Collections.Generic;` `class` `geeks``{` `    ``// Function to return the count of distinct``    ``// characters in all the distinct``    ``// sub-strings of the given string``    ``public` `static` `int` `countTotalDistinct(String str)``    ``{``        ``int` `cnt = 0;` `        ``// To store all the sub-strings``        ``HashSet items = ``new` `HashSet();` `        ``for` `(``int` `i = 0; i < str.Length; ++i)``        ``{` `            ``// To store the current sub-string``            ``String temp = ``""``;` `            ``// To store the characters of the``            ``// current sub-string``            ``HashSet<``char``> ans = ``new` `HashSet<``char``>();``            ``for` `(``int` `j = i; j < str.Length; ++j)``            ``{``                ``temp = temp + str[j];``                ``ans.Add(str[j]);` `                ``// If current sub-string hasn't``                ``// been stored before``                ``if` `(!items.Contains(temp))``                ``{` `                    ``// Insert it into the set``                    ``items.Add(temp);` `                    ``// Update the count of``                    ``// distinct characters``                    ``cnt += ans.Count;``                ``}``            ``}``        ``}` `        ``return` `cnt;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``String str = ``"ABCA"``;``        ``Console.WriteLine(countTotalDistinct(str));``    ``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output:

`18`

Time complexity: O(n^2)

As the nested loop is used the complexity is order if n^2

Space complexity: O(n)

two sets of size n are used so the complexity would be O(2n) nothing but O(n).

My Personal Notes arrow_drop_up