Count of all unique substrings with non-repeating characters
Last Updated :
24 Mar, 2023
Given a string str consisting of lowercase characters, the task is to find the total number 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
// 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;
}
Java
// 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
Python3
# 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
# substring till 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 substring in 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
C#
// 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
JavaScript
<script>
// JavaScript program to find the count of
// all unique sub-strings with
// non-repeating characters
// Function to count all unique
// distinct character substrings
function distinctSubstring(P, N)
{
// Hashmap to store all substrings
var S = new Set();
// Iterate over all the substrings
for (var i = 0; i < N; ++i) {
// Boolean array to maintain all
// characters encountered so far
var freq = Array(26).fill(false);
// Variable to maintain the
// substring till current position
var s = "";
for (var j = i; j < N; ++j) {
// Get the position of the
// character in the string
var pos = P[j].charCodeAt(0) - 'a'.charCodeAt(0);
// 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.size;
}
// Driver code
var S = "abba";
var N = S.length;
document.write( distinctSubstring(S, N));
</script>
Time Complexity: O(N2) where N is the length of the string.
Auxiliary Space: O(N2), to store all substrings in hashmap.
Similar Reads
Count K-Length Substrings With No Repeated Characters Given a string S and an integer k, the task is to return the number of substrings in S of length k with no repeated characters.Example:Input: S = "geeksforgeeks", k = 5Output: 4Explanation: There are 4 substrings, they are: 'eksfo', 'ksfor', 'sforg', 'forge'.Input: S = "home", k = 5Output: 0Explanat
6 min read
Count of substrings of a given Binary string with all characters same Given binary string str containing only 0 and 1, the task is to find the number of sub-strings containing only 1s and 0s respectively, i.e all characters same. Examples: Input: str = â011âOutput: 4Explanation: Three sub-strings are "1", "1", "11" which have only 1 in them, and one substring is there
10 min read
Count the sum of count of distinct characters present in all Substrings Given a string S consisting of lowercase English letters of size N where (1 <= N <= 105), the task is to print the sum of the count of distinct characters N where (1 <= N <= 105)in all the substrings. Examples: Input: str = "abbca"Output: 28Explanation: The following are the substrings o
8 min read
Count substrings with each character occurring at most k times Given a string S. Count number of substrings in which each character occurs at most k times. Assume that the string consists of only lowercase English alphabets. Examples: Input : S = ab k = 1 Output : 3 All the substrings a, b, ab have individual character count less than 1. Input : S = aaabb k = 2
15+ min read
Count the number of Unique Characters in a String in Python We are given a string, and our task is to find the number of unique characters in it. For example, if the string is "hello world", the unique characters are {h, e, l, o, w, r, d}, so the output should be 8.Using setSet in Python is an unordered collection of unique elements automatically removing du
2 min read