Skip to content

1239. Maximum Length of a Concatenated String with Unique Characters

Difficulty Topics

Description

You are given an array of strings arr. A string s is formed by the concatenation of a subsequence of arr that has unique characters.

Return the maximum possible length of s.

A subsequence is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements.

 

Example 1:

Input: arr = ["un","iq","ue"]
Output: 4
Explanation: All the valid concatenations are:
- ""
- "un"
- "iq"
- "ue"
- "uniq" ("un" + "iq")
- "ique" ("iq" + "ue")
Maximum length is 4.

Example 2:

Input: arr = ["cha","r","act","ers"]
Output: 6
Explanation: Possible longest valid concatenations are "chaers" ("cha" + "ers") and "acters" ("act" + "ers").

Example 3:

Input: arr = ["abcdefghijklmnopqrstuvwxyz"]
Output: 26
Explanation: The only string in arr has all 26 characters.

 

Constraints:

  • 1 <= arr.length <= 16
  • 1 <= arr[i].length <= 26
  • arr[i] contains only lowercase English letters.

Solution

maximum-length-of-a-concatenated-string-with-unique-characters.py
class Solution:
    def maxLength(self, arr: List[str]) -> int:
        N = len(arr)

        @cache
        def go(index, mask):
            if index == N: return 0

            res = go(index + 1, mask)
            valid = True
            curr = mask

            for char in arr[index]:
                k = ord(char) - ord("a")
                if curr & (1 << k) > 0:
                    valid = False
                    break
                else:
                    curr ^= (1 << k)

            if valid:  
                res = max(res, len(arr[index]) + go(index + 1, curr))

            return res

        return go(0, 0)