Go 字符串反转问题解决思路

本文分享了作者在数据结构和算法学习上的计划与心得,介绍了《编程之法》和《进军硅谷程序员面试揭秘》两本书的学习路线,重点讲解了字符串反转问题的不同解法,并提供了Go语言代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不忘初心,砥砺前行 

作者 | 陌无崖

转载请联系授权 

导语

大三上学期即将结束,按照自己的计划,大三下学期就要在网上投简历找工作了。还是有点忐忑的,接下来的日子准备沉淀沉淀自己的知识,尤其是数据结构和算法,因此我在图书馆借了两本名叫《编程之法》和《进军硅谷程序员面试揭秘》的书,打算用作我的学习。决定以后抽时间将书上的内容尽可能的吃透。公众号也随之更新我的心得和笔记。练习的代码会同步托管的到码云上,可以公众号回复码云获取我的仓库,觉得还行的话,麻烦大家点个星,在我面试的时候,希望可以拿这当作我的一个亮点,提前谢谢大家了。

字符串反转问题

随机给出一个字符串,要求对前m个字符放到原来字符串的尾部。

解题方法一:蛮力移位

 1、定义指向该字符串的指针 str

 2、字符串的长度为n

 3、编写函数,功能为每次将我们的字符串的第一个字符移动到最后

 若要使字符串前m个字符移动到后面,则只需调用函数m

func LeftShiftOne(str *string, n int) {  // 保存第一个字符  // 将字符传存放到rune数组  // string转换成rune  strs := []rune(*str)  // 存放第一个字符  f := strs[0]  *str = ""  // 循环数组  for i := 1; i < n; i++ {    strs[i-1] = strs[i]  }  strs[n-1] = f
*str += string(strs[n-1]) *str = string(strs)}

这里需要大家数量掌握Go语言中关于string和rune的用法

//string 转[]byteb := []byte(str)
//[]byte转stringstr = string(b)
//string 转 runer := []rune(str)
//rune 转 stringstr = string(r)

解题方法二:三步反转

对于题目的要求我们可以换个角度,我们可以将字符串前面的部分原封不动的移动到字符串的尾部,那么是否可以把需要移动的部分和不需要移动的部分分成两个部分,因此我们可以对分成两部分的字符串进行各自的反转组合成新的字符串,然后再对新的字符串进行反转。

首先我们需要编写一个函数来实现字符串的反转

func ReverseStringOne(str *string, from int, to int) {  ru := []rune(*str)  for from < to {    c := ru[from]    ru[from] = ru[to]    from += 1    ru[to] = c    to -= 1  }  *str = string(ru)}

接着我们就可以对我们的字符串进行三个步骤的反转,我们为了更加简单,保持原有的字符串不变的传入,我们只需要对该字符串进行部分反转,前后各反转和最终反转如下

func LeftShiftOne(str *string, n int, m int) {  // 将字符串根据要求进行反转为两个部分  ReverseStringOne(str, 0, m-1)  ReverseStringOne(str, m, n-1)  ReverseStringOne(str, 0, n-1)}

举一反三

输入一个英文句子,反转句子中单词的顺序,要求单词中的顺序不变,如“I am a student.” 最终输出 “student. a am I”,标点符号和普通字母一样处理即可。

此题的答案可以在我的仓库中找到。

关注我试试回复以下关键词

go 微服务 ppt

大数据 书籍 资料 


END

今日推荐阅读

RabbitMQ系列笔记广播模式和路由模式 
RabbitMQ系列笔记入门篇

RabbitMQ系列笔记work模式

RabbitMQ系列笔记work模式

protoc语法详解及结合grpc定义服务

Golang中Model的使用

基于Nginx和Consul构建高可用及自动发现的Docker服务架构

▼关注我,一起成长

    主要分享 学习心得、笔记、随笔▼

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值