<p>Given a string <code>s</code> consisting of lowercase English letters. Perform the following operation:</p>

<ul>
	<li>Select any non-empty <span data-keyword="substring-nonempty">substring</span> then replace every letter of the substring with the preceding letter of the English alphabet. For example, &#39;b&#39; is converted to &#39;a&#39;, and &#39;a&#39; is converted to &#39;z&#39;.</li>
</ul>

<p>Return the <span data-keyword="lexicographically-smaller-string"><strong>lexicographically smallest</strong></span> string <strong>after performing the operation</strong>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;cbabc&quot;</span></p>

<p><strong>Output:</strong> <span class="example-io">&quot;baabc&quot;</span></p>

<p><strong>Explanation:</strong></p>

<p>Perform the operation on the substring starting at index 0, and ending at index 1 inclusive.</p>
</div>

<p><strong class="example">Example 2:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;aa&quot;</span></p>

<p><strong>Output:</strong> <span class="example-io">&quot;az&quot;</span></p>

<p><strong>Explanation:</strong></p>

<p>Perform the operation on the last letter.</p>
</div>

<p><strong class="example">Example 3:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;acbbc&quot;</span></p>

<p><strong>Output:</strong> <span class="example-io">&quot;abaab&quot;</span></p>

<p><strong>Explanation:</strong></p>

<p>Perform the operation on the substring starting at index 1, and ending at index 4 inclusive.</p>
</div>

<p><strong class="example">Example 4:</strong></p>

<div class="example-block">
<p><strong>Input:</strong> <span class="example-io">s = &quot;leetcode&quot;</span></p>

<p><strong>Output:</strong> <span class="example-io">&quot;kddsbncd&quot;</span></p>

<p><strong>Explanation:</strong></p>

<p>Perform the operation on the entire string.</p>
</div>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 3 * 10<sup>5</sup></code></li>
	<li><code>s</code> consists of lowercase English letters</li>
</ul>

class Solution:
    def smallestString(self, s: str) -> str:
        # Length of the input string
        length_of_string = len(s)
        # Initialize index to start from the beginning
        index = 0

        # Skip all the 'a' characters from the start
        while index < length_of_string and s[index] == "a":
            index += 1
          
        # If the string is made up entirely of 'a's, then replace the last 'a' with 'z'
        if index == length_of_string:
            return s[:-1] + "z"
          
        # Find the index where 'a' appears after the consecutive sequence of non 'a' characters
        next_a_index = index
        print(next_a_index)
        while next_a_index < length_of_string and s[next_a_index] != "a":
            next_a_index += 1
            print(next_a_index)
      
        # Decrease every character in the substring from 'index' to 'next_a_index' by one
        # and replace that part of the string with the new substring
        return (s[:index] + 
                "".join(chr(ord(char) - 1) for char in s[index:next_a_index]) +
                s[next_a_index:])

# Here's a brief explanation of how the function operates:
# 1. The function finds the first sequence of non 'a' characters.
# 2. It then reduces each character in this sequence by 1 lexicographically.
# 3. If the whole string contains only 'a' characters, it turns the last 'a' into a 'z'.
# 4. The updated string is returned as the result. 
268