Split a string into maximum number of unique substrings Last Updated : 18 Jul, 2021 Comments Improve Suggest changes Like Article Like Report Given string str, the task is to split the string into the maximum number of unique substrings possible and print their count. Examples: Input: str = "ababccc"Output: 5Explanation:Split the given string into the substrings "a", "b", "ab", "c" and "cc".Therefore, the maximum count of unique substrings is 5. Input: str = "aba"Output: 2 Approach: The problem can be solved by the Greedy approach. Follow the steps below to solve the problem: Initialize a Set S.Iterate over the characters of the string str and for each i and find the substring up to that index.If the given substring is not present in the Set S, insert it updates the maximum count, and remove it from the Set, because the same character cannot be reused.Return the maximum count. Below is the implementation of the above approach: C++ // CPP program for the above approach #include<bits/stdc++.h> using namespace std; // Utility function to find maximum count of // unique substrings by splitting the string int maxUnique(string S, set<string> st) { // Stores maximum count of unique substring // by splitting the string into substrings int mx = 0; // Iterate over the characters of the string for (int i = 1; i <= S.length(); i++) { // Stores prefix substring string tmp = S.substr(0, i); // Check if the current substring // already exists if (st.find(tmp) == st.end()) { // Insert tmp into set st.insert(tmp); // Recursively call for remaining // characters of string mx = max(mx, maxUnique(S.substr(i), st) + 1); // Remove from the set st.erase(tmp); } } // Return answer return mx; } // Function to find the maximum count of // unique substrings by splitting a string // into maximum number of unique substrings int maxUniqueSplit(string S) { set<string> st; return maxUnique(S, st); } // Driver Code int main() { string S = "ababccc"; int res = maxUniqueSplit(S); cout<<res; } // This code is contributed by jana_sayantan. Java // Java program for the above approach import java.io.*; import java.util.*; class Solution { // Function to find the maximum count of // unique substrings by splitting a string // into maximum number of unique substrings public int maxUniqueSplit(String S) { return maxUnique(S, new HashSet<String>()); } // Utility function to find maximum count of // unique substrings by splitting the string public int maxUnique(String S, Set<String> set) { // Stores maximum count of unique substring // by splitting the string into substrings int max = 0; // Iterate over the characters of the string for (int i = 1; i <= S.length(); i++) { // Stores prefix substring String tmp = S.substring(0, i); // Check if the current substring // already exists if (!set.contains(tmp)) { // Insert tmp into set set.add(tmp); // Recursively call for remaining // characters of string max = Math.max(max, maxUnique( S.substring(i), set) + 1); // Remove from the set set.remove(tmp); } } // Return answer return max; } } // Driver Code class GFG { public static void main(String[] args) { Solution st = new Solution(); String S = "ababccc"; int res = st.maxUniqueSplit(S); System.out.println(res); } } Python3 # Python3 program for the above approach # Utility function to find maximum count of # unique substrings by splitting the string def maxUnique(S): global d # Stores maximum count of unique substring # by splitting the string into substrings maxm = 0 # Iterate over the characters of the string for i in range(1, len(S) + 1): # Stores prefix substring tmp = S[0:i] # Check if the current substring # already exists if (tmp not in d): # Insert tmp into set d[tmp] = 1 # Recursively call for remaining # characters of string maxm = max(maxm, maxUnique(S[i:]) + 1) # Remove from the set del d[tmp] # Return answer return maxm # Driver Code if __name__ == '__main__': # Solution st = new Solution() S = "ababccc" d = {} res = maxUnique(S) # d = {} print(res) # This code is contributed by mohit kumar 29. C# // C# program for the above approach using System; using System.Collections.Generic; class GFG { // Function to find the maximum count of // unique substrings by splitting a string // into maximum number of unique substrings public int maxUniqueSplit(String S) { return maxUnique(S, new HashSet<String>()); } // Utility function to find maximum count of // unique substrings by splitting the string public int maxUnique(String S, HashSet<String> set) { // Stores maximum count of unique substring // by splitting the string into substrings int max = 0; // Iterate over the characters of the string for (int i = 1; i <= S.Length; i++) { // Stores prefix substring String tmp = S.Substring(0, i); // Check if the current substring // already exists if (!set.Contains(tmp)) { // Insert tmp into set set.Add(tmp); // Recursively call for remaining // characters of string max = Math.Max(max, maxUnique( S.Substring(i), set) + 1); // Remove from the set set.Remove(tmp); } } // Return answer return max; } } // Driver Code public class GFG { public static void Main(String[] args) { Solution st = new Solution(); String S = "ababccc"; int res = st.maxUniqueSplit(S); Console.WriteLine(res); } } // This code contributed by shikhasingrajput JavaScript <script> // Javascript program for the above approach // Utility function to find maximum count of // unique substrings by splitting the string function maxUnique(S, st) { // Stores maximum count of unique substring // by splitting the string into substrings var mx = 0; // Iterate over the characters of the string for (var i = 1; i <= S.length; i++) { // Stores prefix substring var tmp = S.substring(0, i); // Check if the current substring // already exists if (!st.has(tmp)) { // Insert tmp into set st.add(tmp); // Recursively call for remaining // characters of string mx = Math.max(mx, maxUnique(S.substring(i), st) + 1); // Remove from the set st.delete(tmp); } } // Return answer return mx; } // Function to find the maximum count of // unique substrings by splitting a string // into maximum number of unique substrings function maxUniqueSplit(S) { var st = new Set(); return maxUnique(S, st); } // Driver Code var S = "ababccc"; var res = maxUniqueSplit(S); document.write( res); </script> Output: 5 Time Complexity: O(2^N ) Auxiliary Space: O(N) Comment More infoAdvertise with us Next Article Split a string into maximum number of unique substrings rohit2sahu Follow Improve Article Tags : Strings Backtracking DSA substring partition +1 More Practice Tags : BacktrackingStrings Similar Reads Split a String into two Substring such that the sum of unique characters is maximum Given a string str, the task is to partition the string into two substrings such that the sum of unique characters of both substrings is the maximum possible. Examples: Input: str = "abcabcdâ Output: 7Explanation: Partition the given string into "abc" and "abcd", the sum of unique characters is 3 + 14 min read Split the binary string into substrings with equal number of 0s and 1s Given a binary string str of length N, the task is to find the maximum count of consecutive substrings str can be divided into such that all the substrings are balanced i.e. they have equal number of 0s and 1s. If it is not possible to split str satisfying the conditions then print -1.Example: Input 8 min read Find minimum number of Substrings with unique characters Given string 's', the task is to divide a given string s into multiple substrings, with each substring containing only unique characters. This means that no character should be repeated within a single substring. The goal is to find the minimum number of such substrings required to satisfy this cond 12 min read String with maximum number of unique characters Given an array of strings, the task is to print the string with the maximum number of unique characters.Note: Strings consists of lowercase characters.If multiple strings exists, then print any one of them.Examples: Input: arr[] = ["abc", "geeksforgeeks", "gfg", "code"]Output: "geeksforgeeks" Explan 5 min read K-th lexicographically smallest unique substring of a given string Given a string S. The task is to print the K-th lexicographically the smallest one among the different substrings of s.A substring of s is a string obtained by taking out a non-empty contiguous part in s. For example, if s = ababc, a, bab and ababc are substrings of s, while ac, z, and an empty stri 5 min read Like