实现一个函数,可以左旋字符串中的k个字符。
例如:
二、代码实现 1. C语言实现 1. 一个一个移ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
一次移动一个字符,一共移动k次
#include2. 三步反转法#include void rotate(char* const str, int k) { assert(str!=NULL && k>=0); int len = strlen(str); k = k % len; int i = 0; for (i=0; i char temp = str[0]; int j = 0; for (j=1; j str[j-1] = str[j]; } str[len-1] = temp; } }
将0 ~ k-1的数据进行反转,再对k ~ len的数据进行反转,最后对整个数组来个反转,就得到了反转数组
当k=3时,对“abcdefgh”反转:
- 对“abc’和”defgh“分别反转
- 对”cbahgfed“进行反转
- 得到旋转后的结果”defghabc“
代码实现:
#include#include //反转字符数组 void reverse(char* left, char* right) { while(left < right) { char temp = *left; *left = *right; *right = temp; left++; right--; } } //旋转字符串 void rotate(char* const str, int k) { assert(str!=NULL && k>0); int len = strlen(str); k %= len; reverse(str, str+k-1); reverse(str+k, str+len-1); reverse(str, str+len-1); }



