Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Find And Replace in String

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "833" 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

You are given a 0-indexed string s that you must perform k replacement operations on. The replacement operations are given as three 0-indexed parallel arrays, indices, sources, and targets, all of length k. To complete the ith replacement operation: Check if the substring sources[i] occurs at index indices[i] in the original string s. If it does not occur, do nothing. Otherwise if it does occur, replace that substring with targets[i]. For example, if s = "abcd", indices[i] = 0, sources[i] = "ab", and targets[i] = "eee", then the result of this replacement will be "eeecd". All replacement operations must occur simultaneously, meaning the replacement operations should not affect the indexing of each other. The testcases will be generated such that the replacements will not overlap. For example, a testcase with s = "abc", indices = [0, 1], and sources = ["ab","bc"] will not be generated because the "ab" and "bc" replacements overlap. Return the resulting string after performing all replacement operations on s. A substring is a contiguous sequence of characters in a string. Example 1: Input: s = "abcd", indices = [0, 2], sources = ["a", "cd"], targets = ["eee", "ffff"] Output: "eeebffff" Explanation: "a" occurs at index 0 in s, so we replace it with "eee". "cd" occurs at index 2 in s, so we replace it with "ffff". Example 2: Input: s = "abcd", indices = [0, 2], sources = ["ab","ec"], targets = ["eee","ffff"] Output: "eeecd" Explanation: "ab" occurs at index 0 in s, so we replace it with "eee". "ec" does not occur at index 2 in s, so we do nothing. Constraints: 1 <= s.length <= 1000 k == indices.length == sources.length == targets.length 1 <= k <= 100 0 <= indexes[i] < s.length 1 <= sources[i].length, targets[i].length <= 50 s consists of only lowercase English letters. sources[i] and targets[i] consist of only lowercase English letters.

Explanation

Here's the solution to the problem:

  • Sort Operations: Sort the replacement operations based on their starting indices. This ensures that we process the replacements in the order they appear in the original string.
  • Iterate and Replace: Iterate through the sorted replacement operations. For each operation, check if the source string matches the substring of the original string starting at the specified index. If it matches, perform the replacement; otherwise, skip the operation.
  • Build Result: Construct the final string by combining the replaced substrings and the unchanged portions of the original string.

  • Runtime Complexity: O(k log k + n + km), where k is the number of replacement operations, n is the length of the original string s, and m is the maximum length of sources[i]. *Storage Complexity: O(n), where n is the length of the original string s.

Code

    def findReplaceString(s: str, indices: list[int], sources: list[str], targets: list[str]) -> str:
    """
    Performs replacement operations on a string.

    Args:
        s: The original string.
        indices: A list of starting indices for replacement operations.
        sources: A list of source strings to be replaced.
        targets: A list of target strings to replace with.

    Returns:
        The resulting string after performing all replacement operations.
    """

    replacements = sorted(zip(indices, sources, targets), key=lambda x: x[0])
    result = ""
    current_index = 0

    for index, source, target in replacements:
        # Add the unchanged portion of the string
        result += s[current_index:index]

        # Check if the source string matches at the given index
        if s[index:index + len(source)] == source:
            result += target
            current_index = index + len(source)
        else:
            result += s[index:index + len(source)]
            current_index = index + len(source)
    # Add any remaining portion of the original string
    result += s[current_index:]

    return result

More from this blog

C

Chatmagic blog

2894 posts

Solving Leetcode Interviews in Seconds with AI: Find And Replace in String