楼主:
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
不知道那个传的是什么捏