给定一个字符串S[0…N-1],要求把S的前K个字符移动到S的尾部,如把字符串“字符串abcdef”前面的2个字符’a’、’b’移动到字符串的尾部,得到新字符串“cdefab”:即字符串循环左移K。
要求时间复杂度为O(n),空间复杂度为O(1).
思路:将a取逆即为a',将b取逆即为b',则ba=(a'b')'
#include<stdio.h>
void ReverseString(char a[],int beg,int end)
{
while(beg<end)
{
char c=a[beg];
a[beg++]=a[end];
a[end--]=c;
}
}
int main()
{
char a[10]="abcdef";
ReverseString(a,0,1);
ReverseString(a,2,5);
ReverseString(a,0,5);
for(int i=0;i<6;i++)
printf("%c",a[i]);
printf("\n");
}