VOOZH about

URL: https://www.geeksforgeeks.org/dsa/maximum-strings-concatenation/

⇱ Maximum Strings Concatenation - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Maximum Strings Concatenation

Last Updated : 23 Jul, 2025

Given an array of strings, where each string consists of lowercase characters from a to j. You need to find the maximum number of strings that can be concatenated together such that the resulting string can be made out of exactly k distinct characters.

Example:

Input: n = 4, str = [ "abc", "de", "fg", "h"], k = 5
Output: 3
Explanation: The strings de, fg and h would add up to defgh which has exactly 5 distinct characters.

Input: n = 3, str = [ "abcde", "de", "fghi"], k = 5
Output: 2
Explanation: The strings "abcde" and "de" would add up to abcdede which has exactly 5 distinct characters.

Approach: This can be solved with the following idea:

The main idea is to use a bitmask approach. We'll represent each string as a bitmask where each bit corresponds to a character in the alphabet (a to j). If a bit is set, it means the corresponding character is present in the string. By manipulating these bitmasks and using bitwise operations, we can efficiently check if a set of strings can be concatenated to form a string with exactly k distinct characters.

Below are the steps involved:

  • Create a map called masks to store bitmasks of all input strings.
  • Iterate through each string in the input s and convert it into a bitmask. Set bits in the bitmask based on the characters present in the string.
  • Initialize ans to 0. This variable will keep track of the maximum number of concatenated strings that satisfy the condition.
  • Iterate through numbers from 0 to 1024 (2^10), representing possible combinations of characters (bitmasks) with up to 10 distinct characters (as there are 10 possible characters from 'a' to 'j').
    • For each number in the iteration, check if it has exactly k set bits using the __builtin_popcount function. If it doesn't, move to the next number.
    • Initialize temp and tans to 0. The temp will be used to combine bitmasks of strings, and tans will store the count of concatenated strings for the current bitmask.
    • Iterate through the masks map and check if the current bitmask includes the bitmask of a string. If it does, set the corresponding bits in temp and add the count of that string to tans.
    • Check if temp is equal to the current bitmask. If they match, it means that all required characters are present in the concatenated strings.
    • Update ans with the maximum of its current value and tans if the bitmasks match.
  • Return the final value of ans, which represents the maximum number of concatenated strings with exactly kdistinct characters.

Below is the implementation of the code:


Output
2

Time Complexity: O(N)
Auxiliary Space: O(N), Where N is the number of strings present in the array.

Comment