标签: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