# Solving Leetcode Interviews in Seconds with AI: Lexicographically Smallest String After Substring Operation


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "2734" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), 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 a string s consisting of lowercase English letters. Perform the following operation:  Select any non-empty substring then replace every letter of the substring with the preceding letter of the English alphabet. For example, 'b' is converted to 'a', and 'a' is converted to 'z'.  Return the lexicographically smallest string after performing the operation.   Example 1:  Input: s = "cbabc" Output: "baabc" Explanation: Perform the operation on the substring starting at index 0, and ending at index 1 inclusive.  Example 2:  Input: s = "aa" Output: "az" Explanation: Perform the operation on the last letter.  Example 3:  Input: s = "acbbc" Output: "abaab" Explanation: Perform the operation on the substring starting at index 1, and ending at index 4 inclusive.  Example 4:  Input: s = "leetcode" Output: "kddsbncd" Explanation: Perform the operation on the entire string.    Constraints:  1 <= s.length <= 3 * 105 s consists of lowercase English letters  

	# Explanation
	Here's the solution to the problem:

*   **Greedy Approach:** Iterate through the string. If a character is not 'a', start a substring replacement. Continue the substring replacement as long as consecutive characters are not 'a'.
*   **Handle 'a' to 'z' Conversion:** When a character is 'a', it should be replaced by 'z'.
*   **Minimize Scope:** The goal is to make the string lexicographically smallest. Thus, once a replacement substring is identified, perform the replacement immediately.

*   **Runtime Complexity:** O(n), where n is the length of the string.
*   **Storage Complexity:** O(n), to store the modified string as a list of characters.

	
	# Code
	```python
	def smallest_string(s: str) -> str:
    """
    Given a string s consisting of lowercase English letters. Perform the following operation:
    Select any non-empty substring then replace every letter of the substring with the preceding
    letter of the English alphabet. For example, 'b' is converted to 'a', and 'a' is converted to 'z'.
    Return the lexicographically smallest string after performing the operation.

    For example:
    smallest_string("cbabc") == "baabc"
    smallest_string("aa") == "az"
    smallest_string("acbbc") == "abaab"
    smallest_string("leetcode") == "kddsbncd"
    """
    n = len(s)
    s_list = list(s)
    start = -1
    for i in range(n):
        if s_list[i] != 'a':
            if start == -1:
                start = i
            s_list[i] = chr(ord(s_list[i]) - 1)
        elif start != -1:
            break

    if start == -1:
        s_list[n - 1] = 'z'

    return "".join(s_list)
	```
			
