3591. Shift Distance Between Two Strings¶
3591. Shift Distance Between Two Strings
Medium
You are given two strings s and t of the same length, and two integer arrays nextCost and previousCost.
In one operation, you can pick any index i of s, and perform either one of the following actions:
- Shift
s[i]to the next letter in the alphabet. Ifs[i] == 'z', you should replace it with'a'. This operation costsnextCost[j]wherejis the index ofs[i]in the alphabet. - Shift
s[i]to the previous letter in the alphabet. Ifs[i] == 'a', you should replace it with'z'. This operation costspreviousCost[j]wherejis the index ofs[i]in the alphabet.
The shift distance is the minimum total cost of operations required to transform s into t.
Return the shift distance from s to t.
Example 1:
Input: s = "abab", t = "baba", nextCost = [100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], previousCost = [1,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Output: 2
Explanation:
- We choose index
i = 0and shifts[0]25 times to the previous character for a total cost of 1. - We choose index
i = 1and shifts[1]25 times to the next character for a total cost of 0. - We choose index
i = 2and shifts[2]25 times to the previous character for a total cost of 1. - We choose index
i = 3and shifts[3]25 times to the next character for a total cost of 0.
Example 2:
Input: s = "leet", t = "code", nextCost = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], previousCost = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
Output: 31
Explanation:
- We choose index
i = 0and shifts[0]9 times to the previous character for a total cost of 9. - We choose index
i = 1and shifts[1]10 times to the next character for a total cost of 10. - We choose index
i = 2and shifts[2]1 time to the previous character for a total cost of 1. - We choose index
i = 3and shifts[3]11 times to the next character for a total cost of 11.
Constraints:
1 <= s.length == t.length <= 105sandtconsist only of lowercase English letters.nextCost.length == previousCost.length == 260 <= nextCost[i], previousCost[i] <= 109
Solution¶
class Solution {
public long shiftDistance(String s, String t, int[] nextCost, int[] previousCost) {
int n = s.length();
long cost = 0;
for (int i = 0; i < n; i++) {
int current = s.charAt(i) - 'a';
int req = t.charAt(i) - 'a';
if (current == req) continue;
long next = 0, prev = 0;
for (int j = current; j != req; j = (j + 1) % 26) next += nextCost[j];
for (int j = current; j != req; j = (j - 1 + 26) % 26) prev += previousCost[j];
cost += Math.min(next, prev);
}
return cost;
}
}
Complexity Analysis¶
- Time Complexity: O(?)
- Space Complexity: O(?)
Explanation¶
[Add detailed explanation here]