题目描述:
将一个字符串循环左移k位,如字符串abcdef
,循环左移2位为cdefab
就像我们看到外面大街上的那个led展示屏幕上的内容滚动一样。
题目解析:
将整个字符串分为两个不同的串,s1 = ab + s2 = cdef
将s1进行反转,得到ba,将s2也进行反转,得到fedc,最终得到了整个字符串s = bafedc
然后将s进行反转,最终可以得到cdefab
代码实现:
#include <string.h>
void ReverseString(char *s,int start,int end)
{
while(start < end)
{
char tmp = s[start];
s[start++] = s[end];
s[end--] = tmp;
}
}
void MoveStringK(char* s,int length,int k)
{
k %= length;
//反转前k个字符的子串
ReverseString(s,0,k-1);
//反转后length - k个字符子串
ReverseString(s,k,length-1);
//将整个字符反转
ReverseString(s,0,length-1);
}
测试:
int main()
{
char s[] = "abcdef";
int len = strlen(s);
MoveStringK(s,len,2);
std::cout<<s<<std::endl;
return 0;
}