6.左旋转字符串
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
将abcdefg的前三个左旋。先abcdefg->defabcg->defgbca(时间为n-3)
将问题转换为将bca的前一个左旋。先bca->acb(时间为1)
将问题转换为将cb的前一个左旋。cb->bc(时间为1)
所有时间复杂度为0(n).
所有的问题都是字母两两交换,辅助内存为O(1).
#include#include using namespace std;char str[]="abcdefghij";void leftRotateString(int left,int right,int n){ int temp=right-left; for(int i=left+n;i