剑指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


相关文章
|
10月前
|
人工智能 供应链 大数据
阿里云联合艾瑞发布【企业数字化人才发展白皮书】
阿里云联合艾瑞发布【企业数字化人才发展白皮书】
|
5月前
|
缓存 安全 Windows
错误代码0x80070570步骤
针对错误代码 ‌0x80070570‌(文件或目录损坏错误),以下是详细解决步骤:
|
6月前
|
JSON Shell Linux
抖音ip地址怎么换成外省的?
抖音IP地址跨省修改的技术实现方案 1. 基本原理与前置知识
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
580 62
|
11月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
532 9
|
6月前
|
存储 数据采集 监控
什么是数据中台,一文读懂数据中台核心功能
在数字化浪潮下,数据成为企业核心资产。然而,数据分散、质量参差、使用效率低等问题困扰企业发展。数据中台应运而生,作为企业的“中枢神经”,它通过整合、治理、分析和共享数据,打破信息孤岛,提升数据价值,助力企业在营销、风控、产品创新和运营等方面实现数据驱动决策。本文深入解析数据中台的概念、功能、应用场景及建设路径,帮助企业理解如何构建高效的数据能力平台,推动业务增长。
|
安全 Linux 开发者
|
Java
java的继承详解
在 Java 中,继承是一个核心概念,它允许子类 `extends` 父类来重用和扩展其属性与方法。子类可以覆盖父类的方法以改变行为,同时使用 `super` 关键字调用父类的构造方法或方法。虽然 Java 不支持多继承,但可以利用抽象类与接口实现多层继承。这种方式极大地增强了代码的复用性和维护性。
285 2
|
人工智能 数据可视化 数据挖掘
上海“爷叔”神话分析——爱在深秋
上海“爷叔”股市评论走红,言论影响巨大,分析显示其预测大多不准确,但个别时机准确,模拟操作获利,反映股市预测复杂性,强调投资需谨慎。
关闭手机卡的流量的方法有哪些?
关闭手机卡的流量的方法主要有以下几种: