问题描述:将一个字符串左旋n个字符。
例如:abcdef左旋两个字符后得到cdefab。
三步逆序法实现字符串左旋思路:
1. 将前n位字符逆序(bacdef)
2. 将剩余位字符逆序(bafedc)
3. 将整个字符串再次逆序(cdefab)
只需这三步,我们便实现了字符串左旋!
C语言实现代码:
void StrReverse(char* left, char* right) { //字符串逆序函数
char c;
while (left < right) {
c = *left;
*left = *right;
*right = c;
left++;
right--;
}
}
void StrLiftRotate(char* str, int n) {
int len = strlen(str);
n %= len; //防止字符串越界,减少运算量
StrReverse(str, str + n - 1);
StrReverse(str + n, str + len - 1);
StrReverse(str, str + len - 1);
}