Split a String Into the Max Number of Unique Substrings

MediumHash TableStringBacktracking

Solution

export function maxUniqueSplit(s: string): number {
  return backtrack(s, new Set());
}
 
function backtrack(s: string, seen: Set<string>, start = 0): number {
  if (start === s.length) {
    return 0;
  }
 
  let result = 0;
  for (let end = start + 1; end <= s.length; end++) {
    const substring = s.substring(start, end);
    if (seen.has(substring)) continue;
    seen.add(substring);
    result = Math.max(result, backtrack(s, seen, end) + 1);
    seen.delete(substring);
  }
  return result;
}

Complexity

  • Time: O(N*2^N)
  • Space: O(N)