Count of all unique substrings with non-repeating characters

Given a string str consisting of lowercase characters, the task is to find the total numbers of unique substrings with non-repeating characters.

Examples:

Input: str = “abba”
Output: 4
Explanation:
There are 4 unique substrings. They are: “a”, “ab”, “b”, “ba”.



Input: str = “acbacbacaa”
Output: 10

Approach: The idea is to iterate over all the substrings. For every substring, check whether each particular character has previously occurred or not. If so, then increase the count of required substrings. In the end return this count as count of all unique substrings with non-repeating characters.

Below is the implementation of the above approach:

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the count of
// all unique sub-strings with
// non-repeating characters
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to count all unique
// distinct character substrings
int distinctSubstring(string& P, int N)
{
    // Hashmap to store all substrings
    unordered_set<string> S;
  
    // Iterate over all the substrings
    for (int i = 0; i < N; ++i) {
  
        // Boolean array to maintain all
        // characters encountered so far
        vector<bool> freq(26, false);
  
        // Variable to maintain the
        // substring till current position
        string s;
  
        for (int j = i; j < N; ++j) {
  
            // Get the position of the
            // character in the string
            int pos = P[j] - 'a';
  
            // Check if the character is
            // encountred
            if (freq[pos] == true)
                break;
  
            freq[pos] = true;
  
            // Add the current character
            // to the substring
            s += P[j];
  
            // Insert substring in Hashmap
            S.insert(s);
        }
    }
  
    return S.size();
}
  
// Driver code
int main()
{
    string S = "abba";
    int N = S.length();
  
    cout << distinctSubstring(S, N);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the count of
// all unique sub-Strings with
// non-repeating characters
import java.util.*;
  
class GFG{
   
// Function to count all unique
// distinct character subStrings
static int distinctSubString(String P, int N)
{
    // Hashmap to store all subStrings
    HashSet<String> S = new HashSet<String>();
   
    // Iterate over all the subStrings
    for (int i = 0; i < N; ++i) {
   
        // Boolean array to maintain all
        // characters encountered so far
        boolean []freq = new boolean[26];
   
        // Variable to maintain the
        // subString till current position
        String s = "";
   
        for (int j = i; j < N; ++j) {
   
            // Get the position of the
            // character in the String
            int pos = P.charAt(j) - 'a';
   
            // Check if the character is
            // encountred
            if (freq[pos] == true)
                break;
   
            freq[pos] = true;
   
            // Add the current character
            // to the subString
            s += P.charAt(j);
   
            // Insert subString in Hashmap
            S.add(s);
        }
    }
   
    return S.size();
}
   
// Driver code
public static void main(String[] args)
{
    String S = "abba";
    int N = S.length();
   
    System.out.print(distinctSubString(S, N)); 
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the count of
# all unique sub-strings with
# non-repeating characters
  
# Function to count all unique
# distinct character substrings
def distinctSubstring(P, N):
      
    # Hashmap to store all substrings
    S = dict()
  
    # Iterate over all the substrings
    for i in range(N):
  
        # Boolean array to maintain all
        # characters encountered so far
        freq = [False]*26
  
        # Variable to maintain the
        # subtill current position
        s = ""
  
        for j in range(i,N):
  
            # Get the position of the
            # character in the string
            pos = ord(P[j]) - ord('a')
  
            # Check if the character is
            # encountred
            if (freq[pos] == True):
                break
  
            freq[pos] = True
  
            # Add the current character
            # to the substring
            s += P[j]
  
            # Insert subin Hashmap
            S[s] = 1
  
    return len(S)
  
# Driver code
S = "abba"
N = len(S)
  
print(distinctSubstring(S, N))
  
# This code is contributed by mohit kumar 29    

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the count of
// all unique sub-Strings with
// non-repeating characters
using System;
using System.Collections.Generic;
  
class GFG{
    
// Function to count all unique
// distinct character subStrings
static int distinctSubString(String P, int N)
{
    // Hashmap to store all subStrings
    HashSet<String> S = new HashSet<String>();
    
    // Iterate over all the subStrings
    for (int i = 0; i < N; ++i) {
    
        // Boolean array to maintain all
        // characters encountered so far
        bool []freq = new bool[26];
    
        // Variable to maintain the
        // subString till current position
        String s = "";
    
        for (int j = i; j < N; ++j) {
    
            // Get the position of the
            // character in the String
            int pos = P[j] - 'a';
    
            // Check if the character is
            // encountred
            if (freq[pos] == true)
                break;
    
            freq[pos] = true;
    
            // Add the current character
            // to the subString
            s += P[j];
    
            // Insert subString in Hashmap
            S.Add(s);
        }
    }  
    return S.Count;
}
    
// Driver code
public static void Main(String[] args)
{
    String S = "abba";
    int N = S.Length;
    
    Console.Write(distinctSubString(S, N)); 
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Output:

4

Time Complexity: O(N2) where N is the length of the string.

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.



Improved By : mohit kumar 29, Rajput-Ji