美文网首页
左旋字符串

左旋字符串

作者: 做手艺的苏大宝 | 来源:发表于2014-05-11 17:36 被阅读0次

Details:

把字符串前面的若干个字符移动到字符串尾部,例如把 abcd 左旋转 2 位得到字符串 cdba。要求时间复杂度为 O(n),空间复杂度为 O(1)。

solution 1:step by step

void left_shift_one(char* a,int n)
{
     assert(a !=NULL);
     char m=a[0];//保存第一个字符
     for(int i=0;i<n;i++)
     {
         a[i]=a[i++];
     }
     a[n-1]=m;
}

然后向左移动k次即可

void left_shift(char*a,int n,int k){
     while(k--)
     {
        left_shift_one(a,n);
     }
}

solution 2:三步反转法

//此解法可见与《编程珠玑》
例如字符串 abcd ,若要让cd翻转到ab的前头,只要按下述3个步骤操作即可:

  1. 首先分为俩部分,X:ab,Y:cd;
  2. 将X反转,即得:ab->ba;将Y反转,即得:cd->dc。
  3. 反转上述得到的结果字符串,即badc给予反转,得cdab。
void reverse(char *a,int start,int end)
{
  while(end>start)
  {
    char t=a[start];
    a[start++]=a[end];
    a[end--]=t;
  }
}
void left_shift(char *a,int n,int m)
{
  int k=m%n;//考虑移位超过n的情况
  reverse(a,0,k-1);
  reverse(a,k,n-1);
  reverse(a,0,n-1);
}

相关文章

  • 剑指offer | 左旋字符串

    左旋字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 示例输入:helloworld和3输出...

  • 2020-05-25 第一题

    面试题58 - II. 左旋转字符串 难度简单30 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部...

  • LeetCode刷题(一)

    面试题58 - II. 左旋转字符串 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义...

  • LeetCode题解之左旋转字符串

    左旋转字符串 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左...

  • 面试题58 - II. 左旋转字符串

    左旋转字符串 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左...

  • 【剑指Offer 42】左旋转字符串

    题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。 ...

  • 面试题58(2):左旋转字符串

    题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比...

  • 左旋转字符串

    题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能...

  • 剑指 Offer 58 - II. 左旋转字符串

    题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能...

  • 面试题58_II_左旋转字符串

    题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能...

网友评论

      本文标题:左旋字符串

      本文链接:https://www.haomeiwen.com/subject/uiwrtttx.html