力扣2381.字母移位II
-
差分
- 求每个位置字母移动几个位置
- 最后在原字符串改动
-
class Solution { const int mod = 26; public: string shiftingLetters(string s, vector<vector<int>>& shifts) { int n = s.size(); vector<int> diff(n+1); function<void(int,int,int)> add = [&](int l,int r,int x) { diff[l] = (diff[l] + x + mod) % mod; diff[r+1] = (diff[r+1] - x + mod)% mod; }; for(auto t:shifts) add(t[0],t[1],t[2]*2 - 1); for(int i=0,sum=0;i<n;i++) { sum = (sum + diff[i] + mod) % mod; s[i] = ((s[i] - 'a') + sum + mod) % mod + 'a'; } return s; } };