标签:bcd abc printf 操作 题目 class 字符串 stdio.h cpp
题目描述:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
我的思路有点简单,就是从断点开始从前往后依次将后面的字符向前移动一位,再把最后面的那个字符换成断点之前的字符
#include<stdio.h>
#include<string.h>
#define N 100
void leftRevolve(char *Inputstr, int n)
{
int slen = strlen(Inputstr);
int flag = 1;
int j;
char c;
for (int i = 1; i <= n;)
{
if (flag)
{
j = n - i;
c = Inputstr[j];
}
if (j < slen - i)
{
Inputstr[j] = Inputstr[++j];
flag = 0;
}
else
{
Inputstr[j] = c;
++i;
flag = 1;
}
}
}
int main()
{
int n;
scanf("%d", &n);
char Inputstr[N];
scanf("%s", Inputstr);
leftRevolve(Inputstr, n);
printf("左旋转%d位后字符串变为%s\n", n, Inputstr);
return 0;
}
标签:bcd abc printf 操作 题目 class 字符串 stdio.h cpp
原文地址:http://www.cnblogs.com/lj95/p/6941592.html