Table of Contents
Problem Statement
In the “Count Number of Substrings with K Distinct Character’s” problem, we have given a string “s” which has only lowercase alphabets and an integer value k. Write a program that will print the number of possible substrings that have exactly k distinct characters.
Input Format
The first line containing a string “s”.
Second-line containing an integer value k.
Output Format
The first and only one line containing an integer value “ans”. Where “ans” denotes the number of possible substrings that have exactly k distinct characters.
Constraints
- 1<=|s|<=10^2
- s[i] must be a lower case English alphabet
- 1<=k<=26
Example
tutorialcup 5
7
Algorithm
The basic approach is to Generate all possible substrings and check whether the substring has exactly k distinct characters or not.
1. For every value of i in the range 0 to n-1 run second for loop where every value of j from i to n-1.
2. Define an unordered map to check the char is already occur or not.
3. If the current character is a new character for this substring, then increment temp.
4. After visiting the substring if the temp is equal to k, then increment result.
Implementation
C++ Program to Count Number of Substrings with K Distinct Character’s
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int k;
cin>>k;
int n=s.length();
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
int temp=0;
unordered_map<char,int> m;
for(int l=i;l<=j;l++)
{
m[s[l]]++;
if(m[s[l]]==1)
{
temp++;
}
}
if(temp==k)
{
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
Java Program to Count Number of Substrings with K Distinct Character’s
import java.util.HashMap;
import java.util.Scanner;
class sum
{
public static void main(String[] args)
{
Scanner sr = new Scanner(System.in);
String s = sr.next();
int n = s.length();
int k = sr.nextInt();
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
int temp=0;
HashMap<Character, Integer> m = new HashMap<>();
for(int l=i;l<=j;l++)
{
boolean check = m.containsKey(s.charAt(k));
if(!check)
{
temp++;
}
}
if(temp==k)
{
ans++;
}
}
}
System.out.println(ans);
}
}
dancingcar 4
10
Complexity Analysis
Time Complexity
O(n^3) where n is the size of the given string “s”. Here we visit every substring manually and update the answer as per the conditions.
Space Complexity
O(n) because we use a map to check the char is present already or not.