All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g2301_2400.s2381_shifting_letters_ii.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g2301_2400.s2381_shifting_letters_ii;

// #Medium #Array #String #Prefix_Sum #2022_08_25_Time_10_ms_(75.00%)_Space_82.7_MB_(75.00%)

/**
 * 2381 - Shifting Letters II\.
 *
 * Medium
 *
 * You are given a string `s` of lowercase English letters and a 2D integer array `shifts` where shifts[i] = [starti, endi, directioni]. For every `i`, **shift** the characters in `s` from the index starti to the index endi ( **inclusive** ) forward if directioni = 1, or shift the characters backward if directioni = 0.
 *
 * Shifting a character **forward** means replacing it with the **next** letter in the alphabet (wrapping around so that `'z'` becomes `'a'`). Similarly, shifting a character **backward** means replacing it with the **previous** letter in the alphabet (wrapping around so that `'a'` becomes `'z'`).
 *
 * Return _the final string after all such shifts to_ `s` _are applied_.
 *
 * **Example 1:**
 *
 * **Input:** s = "abc", shifts = \[\[0,1,0],[1,2,1],[0,2,1]]
 *
 * **Output:** "ace"
 *
 * **Explanation:** Firstly, shift the characters from index 0 to index 1 backward. Now s = "zac".
 *
 * Secondly, shift the characters from index 1 to index 2 forward. Now s = "zbd".
 *
 * Finally, shift the characters from index 0 to index 2 forward. Now s = "ace".
 *
 * **Example 2:**
 *
 * **Input:** s = "dztz", shifts = \[\[0,0,0],[1,1,1]]
 *
 * **Output:** "catz"
 *
 * **Explanation:** Firstly, shift the characters from index 0 to index 0 backward. Now s = "cztz".
 *
 * Finally, shift the characters from index 1 to index 1 forward. Now s = "catz".
 *
 * **Constraints:**
 *
 * *   1 <= s.length, shifts.length <= 5 * 104
 * *   `shifts[i].length == 3`
 * *   0 <= starti <= endi < s.length
 * *   0 <= directioni <= 1
 * *   `s` consists of lowercase English letters.
**/
public class Solution {
    public String shiftingLetters(String s, int[][] shifts) {
        int[] diff = new int[s.length() + 1];
        int l;
        int r;
        for (int[] shift : shifts) {
            l = shift[0];
            r = shift[1] + 1;
            diff[l] += 26;
            diff[r] += 26;
            if (shift[2] == 0) {
                diff[l]--;
                diff[r]++;
            } else {
                diff[l]++;
                diff[r]--;
            }
            diff[l] %= 26;
            diff[r] %= 26;
        }
        StringBuilder sb = new StringBuilder();
        int current = 0;
        int val;
        for (int i = 0; i < s.length(); ++i) {
            current += diff[i];
            val = s.charAt(i) - 'a';
            val += current;
            val %= 26;
            sb.append((char) ('a' + val));
        }
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy