Skip to content

878. Shifting Letters

Difficulty: Medium

LeetCode Problem View on GitHub


878. Shifting Letters

Medium


You are given a string s of lowercase English letters and an integer array shifts of the same length.

Call the shift() of a letter, the next letter in the alphabet, (wrapping around so that 'z' becomes 'a').

  • For example, shift('a') = 'b', shift('t') = 'u', and shift('z') = 'a'.

Now for each shifts[i] = x, we want to shift the first i + 1 letters of s, x times.

Return the final string after all such shifts to s are applied.

 

Example 1:

Input: s = "abc", shifts = [3,5,9]
Output: "rpl"
Explanation: We start with "abc".
After shifting the first 1 letters of s by 3, we have "dbc".
After shifting the first 2 letters of s by 5, we have "igc".
After shifting the first 3 letters of s by 9, we have "rpl", the answer.

Example 2:

Input: s = "aaa", shifts = [1,2,3]
Output: "gfd"

 

Constraints:

  • 1 <= s.length <= 105
  • s consists of lowercase English letters.
  • shifts.length == s.length
  • 0 <= shifts[i] <= 109

Solution

class Solution {
    public String shiftingLetters(String s, int[] shifts) {
        int n = s.length();
        long pref[] = new long[n];
        for (int i = 0; i < n; i++) {
            int u = 0, v = i;
            pref[u] = (pref[u] + shifts[i]);
            if (v + 1 < n) pref[v + 1] -= shifts[i];
        }
        for (int i = 1; i < n; i++) pref[i] += pref[i - 1];
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < n; i++) {
            char current = s.charAt(i);
            if (pref[i] == 0) {
                res.append(current);
                continue;
            }
            else {
                long time_forward = pref[i] % 26;
                while (time_forward > 0) {
                    if (current == 'z') {
                        current = 'a';
                        time_forward--;
                    }
                    else {
                        current++;
                        time_forward--;
                    }
                }
                res.append(current);
            }
        }
        return res.toString();
    }
}

Complexity Analysis

  • Time Complexity: O(?)
  • Space Complexity: O(?)

Approach

Detailed explanation of the approach will be added here