注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
本帖最后由 lhy1987 于 2012-11-12 05:05 编辑
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
我的解法是这样的:
- void spin(char *str, int i, int j){
- while(1){
- if(str == 0||*(str+j+1)=='\0') break;
- if(j<i) break;
- if((j-i+1)>strlen(str+j+1)){
- int p = i, q=j+1;
- char temp;
- while(*(str+q)!='\0'){
- temp = *(str+p);
- *(str+p) = *(str+q);
- *(str+q) = temp;
- p++;
- q++;
- }
- i =p;
- }else{
- int p = i, q=j+1;
- char temp;
- while(p<=j&&*str+q!='\0'){
- temp = *(str+p);
- *(str+p) = *(str+q);
- *(str+q) = temp;
- p++;
- q++;
- }
- i=p;
- j=q-1;
- }
- }
- }
复制代码 请问只是O(n)的解法吗? |