左旋转字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左旋转字符串相关的知识,希望对你有一定的参考价值。
题目描述:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串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; }
以上是关于左旋转字符串的主要内容,如果未能解决你的问题,请参考以下文章