字符串旋转

下面描述两种算法
空间复杂度都为O(1)

解法一

暴力移位

#define len(a) (sizeof(a)/sizeof(*a))
#include <stdio.h>
#include <assert.h>
void leftShiftOne(char* string, int length);
void leftRotateString(char* string, int length, int num);
int main(void){
    char string[] = "asdfqwer";
    printf("%s\n", string);
    leftRotateString(string,len(string)-1,4);
    printf("%s\n", string);
}

void leftShiftOne(char* string, int length) {
    assert(string != NULL);
    char tmp = string[0];
    int i;
    for(i=1; i < length; i++) {
        string[i-1] = string[i];
    }
    string[length-1] = tmp;
}

void leftRotateString(char* string, int length, int num) {
    assert(num>=0);
    while(num--) {
        leftShiftOne(string,length);
    }
}

时间复杂度num*length
空间复杂度O(1)

解法二

三步反转法

它基于一个公式
X="abc"
X^T="cba"
(X^T YT)T=YX

#include <stdio.h>
#include <assert.h>
#define len(a) (sizeof(a)/sizeof(*a))
void reverseString(char* s, int from ,int to);
void leftRotateString(char *s, int length, int num);
int main(void){
    char s[] = "asdfqwer";
    printf("%s\n",s);
    leftRotateString(s, len(s)-1, 3);
    printf("%s\n",s);
    return 0;
}

void reverseString(char* s, int from ,int to) {
    while(from < to) {
        char tmp = s[from];
        s[from++] = s[to];
        s[to--] = tmp;
    }
}

void leftRotateString(char *s, int length, int num) {
    num = num%length;
    reverseString(s,0,num-1);
    reverseString(s,num,length-1);
    reverseString(s,0,length-1);
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目描述 原文地址给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的...
    王尼小老板阅读 1,006评论 0赞 4
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 13,121评论 0赞 33
  • 旋转字符串 题目描述: 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”...
    MinoyJet阅读 415评论 0赞 1
  • 首先总结以下Java和C、C++中的一般控制台输入方式,方便以后的编程题: java键盘输入 java读文件(会自...
    androidjp阅读 2,437评论 0赞 16
  • 为什么还在坚持,知道后果吗?说好的结束呢?其实这是对我最好的惩罚,何时才能到头?我真的感觉力不从心,为何总是要抱怨...
    Yoyo姚阅读 304评论 0赞 1

友情链接更多精彩内容