LeetCode-in-Java

2734. Lexicographically Smallest String After Substring Operation

Medium

You are given a string s consisting of only lowercase English letters. In one operation, you can do the following:

Return the lexicographically smallest string you can obtain after performing the above operation exactly once.

A substring is a contiguous sequence of characters in a string.

A string x is lexicographically smaller than a string y of the same length if x[i] comes before y[i] in alphabetic order for the first position i such that x[i] != y[i].

Example 1:

Input: s = “cbabc”

Output: “baabc”

Explanation: We apply the operation on the substring starting at index 0, and ending at index 1 inclusive. It can be proven that the resulting string is the lexicographically smallest.

Example 2:

Input: s = “acbbc”

Output: “abaab”

Explanation: We apply the operation on the substring starting at index 1, and ending at index 4 inclusive. It can be proven that the resulting string is the lexicographically smallest.

Example 3:

Input: s = “leetcode”

Output: “kddsbncd”

Explanation: We apply the operation on the entire string. It can be proven that the resulting string is the lexicographically smallest.

Constraints:

Solution

public class Solution {
    public String smallestString(String s) {
        int i = 0;
        int n = s.length();
        char[] a = s.toCharArray();
        while (i < n && a[i] == 'a') {
            i++;
            if (i == n) {
                a[n - 1] = 'z';
            }
        }
        while (i < n && a[i] != 'a') {
            --a[i++];
        }
        return String.valueOf(a);
    }
}