OJ刷题:《剑指offer》之左旋字符串!

news2024/10/4 20:07:59

目录

1.题目描述

2.方法一(元素一一挪)

2.1算法解析

2.2代码实现

3.方法二(三次逆置)

3.1算法解析

3.2代码实现

4.方法三(库方法)

4.1算法解析

4.2代码实现

5.完结散花


创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~

1.题目描述

https://www.nowcoder.com/share/jump/1889476041706625158356 题目链接放这里啦~

2.方法一(元素一一挪)

2.1算法解析

 由上图我们可以发现左移6次左移1次后的结果相同,所以我们可以用n%len来表示字符串左移的元素个数,那我们该怎么左移呢~

下面我用图像来表示核心算法~

2.2代码实现

 下面是在牛客上解题的完整代码~

char* LeftRotateString(char* str, int n) 
{
    if(str==NULL)
	return NULL;
	int len=strlen(str);
	if(len==0)
	return str;
	int time=n%len;
	if(time==0)
	return str;//不用处理,返回原数组即可
	for (int i = 0; i < time; i++)
{
	int tmp = str[0];
	int j = 0;
	for (; j < len - 1; j++)
	{
		str[j] = str[j + 1];
	}
	str[j] = tmp;
}
return str;
}

3.方法二(三次逆置)

3.1算法解析

废话不多说,直接上图啦~

怎么样,算法是不是很简单呢~ 

3.2代码实现

void Reverse(char str[], int start,int end)
{
	while (start < end)
	{
		int tmp = str[start];
		str[start] = str[end];
		str[end] = tmp;
		start++;
		end --;
	}
}//部分逆置函数
char* LeftRotateString(char* str, int n) 
{
    int len=strlen(str);
	if(len==0)//没有这个判断,编不过去
	return str;
	int k=n%len;
	Reverse(str,0,k-1);
	Reverse(str,k,len-1);
	Reverse(str,0,len-1);
	return str;
}

4.方法三(库方法)

4.1算法解析

再讲具体算法前,这里要先介绍俩个库函数(strcpy,strcat)

. strcpy

. strcat

 下面就是这种算法的图解啦~

 

4.2代码实现

char* LeftRotateString(char* str, int n) 
{
    if(NULL==str)
    return NULL;
    int size=strlen(str);
    if(size==0)
        return str;//这里换成NULL就不能通过
    int k=n%size;
    char*tmp=(char*)malloc(sizeof(char)*2*size);//动态内存开辟俩倍空间
    strcpy(tmp,str);
    //我们下意识的这里也同样使用strcpy但是这会存在问题。
    //因为strcpy会拷贝‘\0’,导致输出的函数可能缺少一部分,而strcat会覆盖‘\0’。
    strcat(tmp,str);
    tmp[k+size]='\0';
    return tmp+k;
}

5.完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做研究系列:快速总结大量研究论文的成果

快速总结大量研究论文的成果时&#xff0c;可以遵循以下步骤和策略来提高效率并确保准确性&#xff1a; 系统性筛选与阅读摘要&#xff1a; 首先根据研究主题或关键词筛选出相关论文。快速阅读每篇论文的摘要&#xff0c;了解其主要目的、方法、关键结果和结论。 构建大纲与分类…

EtherCAT FP介绍系列文章—UDP gateway

EtherCAT主站上的Mailbox Gateway功能&#xff0c;可以用于将EtherCAT mailbox相关协议从外部设备的工具通过邮箱网关路由到EtherCAT从站设备。在EtherCAT规范中定义的所有邮箱协议在此功能中都可用&#xff0c;例如CoE, FoE, VoE, SoE。 但是&#xff0c;这里特别注意的是Mai…

Elasticsearch-内存结构

ElasticSearch的内存从大的结构可以分堆内存&#xff08;On Heap&#xff09;和堆外内存&#xff08;Off Heap&#xff09;。Off Heap部分由Lucene进行管理。On Heap部分存在可GC部分和不可GC部分&#xff0c;可GC部分通过GC回收垃圾对象&#xff0c;从而释放内存。不可GC部分不…

英码科技携手昇腾共建算力底座:推出EA500I超强AI处理能力边缘计算盒子!

在数字经济浪潮中&#xff0c;算力已成为不可或缺的驱动力&#xff0c;为各行各业的数字化转型提供了强大的推动力。面对多元化和供需不平衡的挑战&#xff0c;需要实现从理论架构到软硬件实现的质的飞跃&#xff0c;以满足持续增长的算力需求&#xff0c;华为昇腾在这一方面展…

基于JAVA和Vue的宠物医院诊所商城论坛管理系统

摘要&#xff1a; 随着人们生活水平的提高&#xff0c;宠物逐渐成为家庭中不可或缺的成员。伴随着宠物行业的迅猛发展&#xff0c;宠物医疗服务需求也日益增长&#xff0c;传统的宠物医院管理模式已无法满足现代化、信息化的管理需求。因此&#xff0c;开发一款高效、智能的宠物…

ElasticSearch-IK分词器(elasticsearch插件)安装配置和ElasticSearch的Rest命令测试

四、IK分词器(elasticsearch插件) IK分词器&#xff1a;中文分词器 分词&#xff1a;即把一段中文或者别的划分成一个个的关键字&#xff0c;我们在搜索时候会把自己的信息进行分词&#xff0c;会把数据库中或者索引库中的数据进行分词&#xff0c;然后进行一一个匹配操作&…

Java密码校验(正则表达式):密码由这四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。

1. 需求 对用户密码的强度进行校验&#xff0c;要求用户密码达到一定的强度&#xff0c;符合安全性要求。 1.1. 基础版需求 密码必须由字母和数字组成&#xff08;同时包括数字和数字&#xff09;&#xff1b;密码长度大于等于8个字符。 1.2. 进阶版需求 密码由这四种元素…

【ARM Coresight 系列文章 8.1 - ARM Coresight 通过 APBIC arbiter】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC arbiter仲裁使用举例APBIC arbiter 在 SoC-600中,APBIC 是用来为 APB4 master 和 APB4 slave 提供 连接关系的组件。APB 是一种简单的总线协议,通常用于低带宽或低性能外设,如定时器、接口控制等。APBIC …

2024美赛数学建模C题思路分析 - 网球的动量

1 赛题 问题C&#xff1a;网球的动量 在2023年温布尔登绅士队的决赛中&#xff0c;20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来首次在温布尔登公开赛失利&#xff0c;并结束了他在大满贯赛事中历史上最伟大的球员之一的非凡表…

Spring Cloud Config核心功能和原理解析

配置管理的前世今生 随着技术的发展&#xff0c;配置项管理变得越来越简单&#xff0c;尽管如今它只限于管理业务属性或者配置初始化参数等等&#xff0c;但是当年它可肩负着 Spring IOC 的光荣使命&#xff0c;风光无限。 想当年刚入行的时候还是 SSH&#xff08;Struts Sp…

【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

22.云原生之GitLab CICD实战及解析【干货】

云原生专栏大纲 文章目录 准备工作gitlab-ci.yml流水线mven打包项目制作并推送镜像kaniko方式docker方式 部署到k8s验证执行情况 GitLab Runner k8s执行器工作流程注册配置kubernetes runnerkubernetes runner配置通过修改 Pod 规范为每个构建作业创建一个 PVC自定义卷装载持久…

负压自动放水器不如早来永成购

CWG&#xff0d;FY型负压自动放水器的结构与性能等参数 &#xff08;1&#xff09;结构 负压自动放水器主要由通大气阀1、负压平衡管2、托盘3、侧导向杆4、磁铁5、中心导向杆6、外筒7、放水阀保护罩8、放水阀9、导向座10、浮漂11、进水阀12等组成。 &#xff08;2&#xff09;性…

Quick BI中lod函数之lod_fixed

一、lod函数简介 LOD函数的全称是详细级别表达式&#xff08;Level Of Detail Expressisons&#xff09;。它主要是为了克服一些表达式之间计算颗粒度不一致的问题。比如&#xff0c;要计算第一季度各月销售收入占比&#xff0c;这里分子计算颗粒度为’月’&#xff0c;但是分…

UML---用例图,类图

用例图 用例图&#xff08;Use Case Diagram&#xff09;主要描述系统的功能需求和参与者与系统之间的交互。它是用户与系统交互的最简表示形式&#xff0c;展现了用户和与他相关的用例之间的关系。用例图被视为系统的蓝图&#xff0c;通过它&#xff0c;人们可以获知系统不同种…

【win】vscode无法使用ctrl+shift+p快捷键的解决方案

本文首发于 ❄️慕雪的寒舍 今天使用vscode的时候遇到的这个问题&#xff0c;明明快捷键设置的是ctrlshiftp&#xff0c;但是在电脑上怎么敲都敲不出来&#xff0c;因为用这个快捷键打开命令面板都习惯了&#xff0c;也不想换&#xff0c;就在找原因。 同时百度的时候还遇到了…

Camera2+OpenGL ES+MediaCodec+AudioRecord实现录制音视频写入H264 SEI数据

记录一下学习过程&#xff0c;得到一个需求是基于Camera2OpenGL ESMediaCodecAudioRecord实现录制音视频。 需求&#xff1a; 在每一帧视频数据中&#xff0c;写入SEI额外数据&#xff0c;方便后期解码时获得每一帧中的自定义数据。点击录制功能后&#xff0c;录制的是前N秒至…

Echars3D 饼图开发

关于vue echart3D 饼图开发 首先要先下载 "echarts-gl", 放在main.js npm install echarts-gl --save <template><div class"cointan"><!-- 3d环形图 --><div class"chart" id"cityGreenLand-charts"><…

Git版本管理工具(实战进阶):零基础到起飞实战项目完整篇 →Git学习一篇就够 从基本指令、到本地仓库、远程仓库、实战项目开发演练介绍超详细!

heima 李师傅最新版 Git的讲解 文章目录 Git在实战项目开发使用功能学习01.Git 初识02.Git 仓库03.Git 的三个区域04.Git 文件状态05.Git 暂存区作用06.练习-登录页面07.Git-切换版本08.删除文件09.忽略文件10.分支的概念11.练习-登录 bug 修复12.分支-合并与删除13.分支-合并与…

three.js CSS3DRenderer、CSS3DObject渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"><…