Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Concatenated Words

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "472" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Given an array of strings words (without duplicates), return all the concatenated words in the given list of words. A concatenated word is defined as a string that is comprised entirely of at least two shorter words (not necessarily distinct) in the given array. Example 1: Input: words = ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"] Output: ["catsdogcats","dogcatsdog","ratcatdogcat"] Explanation: "catsdogcats" can be concatenated by "cats", "dog" and "cats"; "dogcatsdog" can be concatenated by "dog", "cats" and "dog"; "ratcatdogcat" can be concatenated by "rat", "cat", "dog" and "cat". Example 2: Input: words = ["cat","dog","catdog"] Output: ["catdog"] Constraints: 1 <= words.length <= 104 1 <= words[i].length <= 30 words[i] consists of only lowercase English letters. All the strings of words are unique. 1 <= sum(words[i].length) <= 105

Explanation

Here's a breakdown of the approach and the Python code:

  • High-Level Approach:

    • Sort the words by length in ascending order. This allows us to efficiently check if a longer word can be formed by concatenating shorter words that have already been processed.
    • Use dynamic programming to determine if a word can be formed by concatenating shorter words. dp[i] will be true if the substring word[:i] can be segmented into smaller words from the input.
    • Maintain a set of valid words encountered so far.
  • Complexity:

    • Runtime Complexity: O(n * l^2), where n is the number of words and l is the maximum length of a word. Sorting takes O(n log n), but it is dominated by the DP part.
    • Storage Complexity: O(n + l), where n is the number of words (for the result and word set) and l is the maximum length of a word (for the DP array).

Code

    def findAllConcatenatedWordsInADict(words):
    """
    Finds all concatenated words in a given list of words.

    Args:
        words: A list of strings.

    Returns:
        A list of strings, representing the concatenated words.
    """
    word_set = set(words)
    result = []

    def can_form(word):
        if not word:
            return True

        n = len(word)
        dp = [False] * (n + 1)
        dp[0] = True

        for i in range(1, n + 1):
            for j in range(i):
                if dp[j] and word[j:i] in word_set:
                    dp[i] = True
                    break
        return dp[n]

    words.sort(key=len)

    for word in words:
        word_set.remove(word) # Temporarily remove the word itself
        if can_form(word):
            result.append(word)
        word_set.add(word)  # Add it back for future checks

    return result

More from this blog

C

Chatmagic blog

2894 posts