Open guodongxiaren opened 4 years ago
编程之美2.17
将字符串向右循环移动 k 位。比如abcd1234向右移动4位是1234abcd。解法有很多,不暴力的情况下,时间和空间最优的解法是:
将 abcd1234,按k位分隔成两段,得到abcd和1234,这两段单独翻转,得到 dcba4321,然后对整个字符串进行翻转,得到 1234abcd。代码:
void reverse(char* arr, int b, int e) { for (; b < e; b++, e--) { char temp = arr[e]; arr[e] = arr[b]; arr[b] = temp; } } void right_shift(char* arr, int N, int k) { k %= N; reverse(arr, 0, N-K-1); reverse(arr, N-k, N-1); reverse(arr, 0, N-1); }
将字符串向右循环移动 k 位。比如abcd1234向右移动4位是1234abcd。解法有很多,不暴力的情况下,时间和空间最优的解法是:
将 abcd1234,按k位分隔成两段,得到abcd和1234,这两段单独翻转,得到 dcba4321,然后对整个字符串进行翻转,得到 1234abcd。代码: