剑指offer之左旋转字符串

简介: 剑指offer之左旋转字符串

1 题目

字符串的左旋转操作是把字符串前面的若干字符转移到字符串尾部,比如字符串abcdef和数字2,函数返回左旋转得到的结果是cdefgab


2 思路

先反转字符串所有,通过数字n找到的边界 ,然后再反转字符串部分左边和部分右边。

 

3 代码实现

#include <stdio.h>
/*
 * 反转整个字符串
 */
void reverse(char *begin, char *end)
{
  if (NULL == begin || NULL == end)
    return;
  while (begin < end)
  {
    char temp = *end;
    *end = *begin;
    *begin = temp;
    ++begin;
    --end;
  }
}
/*
 * 左旋转字符串
 * abcdefg
 * gfedcba
 * cdefgab
 */
char* leftReverse(char *str, int n)
{
    if (str == NULL || n < 0)
    {
        return NULL;
    }
    //先反转所有字符串
    char *begin = str;
    char *end = str;
    int len = 0, count = n;
    while (*end != '\0')
    {
        ++end;
        ++len;
    }
    if (n > len)
    {
        return NULL;
    }
    end--;
    reverse(begin, end);
    begin = str;
  //移动end到左右反转分界地方
    while (n > 0)
    {
        --n;
        --end;
    }
  //反转左边一部分
    reverse(begin, end);
  //反转右边一部分
    reverse(end + 1, end + count);
    return str;
}
int main()
{
    char b[] = "abcdefg";
    char *result = NULL;
    result = leftReverse(b, 2);
    printf("%s\n", result);
    return 0;
}

4 运行结果

cdefgab


相关文章
|
9月前
|
存储
【剑指offer】-左旋转字符串-41/67
【剑指offer】-左旋转字符串-41/67
|
4月前
(剑指offer)05 替换空格-58 II.-左旋转字符串(2021-11-25)
(剑指offer)05 替换空格-58 II.-左旋转字符串(2021-11-25)
36 0
|
9月前
|
C++
【剑指offer】-重建二叉树-04/67
【剑指offer】-重建二叉树-04/67
剑指offer-6.重建二叉树
剑指offer-6.重建二叉树
38 0
|
机器学习/深度学习 C++
剑指offer 66. 左旋转字符串
剑指offer 66. 左旋转字符串
88 0
|
存储 容器
剑指offer 50. 丑数
剑指offer 50. 丑数
75 0
|
Perl
剑指offer 06. 重建二叉树
剑指offer 06. 重建二叉树
56 0
重建二叉树(剑指offer 07)
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
118 0
重建二叉树(剑指offer 07)
|
Java Python
左旋转字符串(剑指offer 58-II)
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
|
算法 Java
左旋转字符串 (剑指Offer58-II)
左旋转字符串 (剑指Offer58-II)
122 0