作者:
Meaverzt (Meaverzt)
2025-01-05 19:58:562381. Shifting Letters II
題目:
給定一個字串s
會有一個叫shifts的2d array
裡面每一項都是[start,end,direction]
意思就是從s的第start項到第end項每一項移動direction
而direction是0的時候要向左移(eg:a變成z)
相反direction是1的時候就向右移(eg:z變成a)
思路:
用一個矩陣delta來算s每一項要移動多少
在遍歷shifts的時候
如果右移就delta[start]+1 因為要加到end所以delta[end+1]-1
如果左移就相反 這樣對delta做完前綴和就是每一項移多少了
Code:
char* shiftingLetters(char* s, int** shifts, int shiftsSize, int* shiftsColSize)
{
int delta[strlen(s) + 1];
memset(delta, 0, sizeof(delta));
for (int i = 0; i < shiftsSize; i++) {
int start = shifts[i][0];
int end = shifts[i][1];
int direction = shifts[i][2];
delta[start] += (direction == 1) ? 1 : -1;
if (end + 1 < strlen(s))
delta[end + 1] -= (direction == 1) ? 1 : -1;
}
int prefix = 0;
for (int i = 0; i < strlen(s); i++) {
prefix += delta[i];
s[i] = 'a' + (s[i] - 'a' + (prefix % 26 + 26) % 26) % 26;
}
return s;
}
寫完發現沒用到shiftsColSize
不知道那個傳的是什麼捏