Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Can Convert String in K Moves

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "1540" 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 two strings s and t, your goal is to convert s into t in k moves or less. During the ith (1 <= i <= k) move you can: Choose any index j (1-indexed) from s, such that 1 <= j <= s.length and j has not been chosen in any previous move, and shift the character at that index i times. Do nothing. Shifting a character means replacing it by the next letter in the alphabet (wrapping around so that 'z' becomes 'a'). Shifting a character by i means applying the shift operations i times. Remember that any index j can be picked at most once. Return true if it's possible to convert s into t in no more than k moves, otherwise return false. Example 1: Input: s = "input", t = "ouput", k = 9 Output: true Explanation: In the 6th move, we shift 'i' 6 times to get 'o'. And in the 7th move we shift 'n' to get 'u'. Example 2: Input: s = "abc", t = "bcd", k = 10 Output: false Explanation: We need to shift each character in s one time to convert it into t. We can shift 'a' to 'b' during the 1st move. However, there is no way to shift the other characters in the remaining moves to obtain t from s. Example 3: Input: s = "aab", t = "bbb", k = 27 Output: true Explanation: In the 1st move, we shift the first 'a' 1 time to get 'b'. In the 27th move, we shift the second 'a' 27 times to get 'b'. Constraints: 1 <= s.length, t.length <= 10^5 0 <= k <= 10^9 s, t contain only lowercase English letters.

Explanation

Here's the solution to the problem, explained step-by-step:

  • Calculate Shifts: Determine the number of shifts needed for each character in s to match the corresponding character in t. This involves handling the wrap-around from 'z' to 'a'.
  • Count Shift Frequencies: Count how many times each shift value (1 to 25) appears. This is because we can perform a shift of i in the ith move.
  • Check Feasibility: Iterate through the shift values. If a shift value i is needed more than k allows (given the current move number), it's impossible to transform s into t.

  • Time Complexity: O(n), where n is the length of the strings s and t.

  • Space Complexity: O(1), as we use a fixed-size array (size 26) to store the frequency of shift values.

Code

    def canConvertString(s: str, t: str, k: int) -> bool:
    """
    Checks if string s can be converted to string t in k moves or less.
    """

    if len(s) != len(t):
        return False

    n = len(s)
    shifts = [0] * 26  # Count of each shift value (1 to 25)

    for i in range(n):
        diff = (ord(t[i]) - ord(s[i])) % 26
        if diff > 0:
            shifts[diff] += 1

    moves_available = [i for i in range(1,27)]

    for i in range(1,26):
        if shifts[i] > 0:
            needed_moves = i
            needed_shifts = shifts[i]

            moves_needed = (needed_shifts -1 ) * 26 + needed_moves

            if moves_needed > k:
                return False

    return True

More from this blog

C

Chatmagic blog

2894 posts