代码随想录二刷之“字符串”~GO

1.344. 反转字符串 - 力扣(LeetCode)

func reverseString(s []byte)  {left := 0right := len(s)-1for left <= right{s[left],s[right] = s[right],s[left]left++right--}return
}

感悟:还是go语法熟练程度的问题,需要注意的是: s[left],s[right] = s[right],s[left]这是go语言交换的常用写法。或者也可以先转换成rune切片 runes := []rune(s),最后再转换回string(runes),因为string的底层是byte

2.541. 反转字符串 II - 力扣(LeetCode)

func reverseStr(s string, k int) string {runes := []rune(s)n := len(runes)for i := 0;i<n;i += 2*k{if i+k >= n{reverse(runes[i:n])}else{reverse(runes[i:i+k])}}return string(runes)
}func reverse(runes []rune){i := 0j :=len(runes)-1for i<= j{runes[i],runes[j] = runes[j],runes[i]i++j--}
}

感悟:题目不难,复习了go语言的string可读性,所以如果要操纵字符串,先要改写成rune类型。同时函数传参的时候也体现了切片的灵活性。runes[i:n]

3.54. 替换数字(第八期模拟笔试)

package main
import "fmt"func main(){var strByte []bytefmt.Scanln(&strByte)for i := 0;i<len(strByte);i++{if strByte[i]>='a'&&strByte[i]<='z'{continue}addbyte := []byte{'n','u','m','b','e','r'}strByte = append(strByte[:i],append(addbyte[:len(addbyte)],strByte[i+1:]...)...)i+=len(addbyte)-1}fmt.Println(string(strByte))
}

感悟:本道题不难,需要强化的是go语言append的语法,以及...的运用。... (可变参数)本质上是一种 “语法糖”,自动将切片拆解为多个独立元素,适配 append 的可变参数要求。

4.151. 反转字符串中的单词 - 力扣(LeetCode)

func reverseWords(s string) string {runes := []rune(s)//去除多余空格slow,fast:=0,0for len(runes) >0 && fast < len(runes) && runes[fast] == ' '{fast++}//头部for ; fast < len(runes) ;fast++{if fast -1 >0 && runes[fast-1] == runes[fast] &&runes[fast] == ' '{continue}runes[slow] = runes[fast]slow++//伏笔}//有可能指向空格的下一位if runes[slow-1] == ' ' && slow -1 >0{runes = runes[:slow-1]}else{runes = runes[:slow]}reverse(runes) //翻转整个字符串for i := 0; i < len(runes);i++{j := ifor ;j < len(runes)&&runes[j] != ' ';j++{}reverse(runes[i:j])i = j} return string(runes)
}func reverse(b []rune){left := 0right := len(b) - 1for left < right {b[left],b[right] = b[right],b[left]left++right--} 
}

感悟:本道题确实忘了,确实不记得了。严重需要三刷!!!总体思路:双指针去空格,fast负责移动,slow负责赋值。好多细节。除此之外,先整体翻转,再按单词逐个翻转。

5.55. 右旋字符串(第八期模拟笔试)

package main
import "fmt"func main(){var target intvar str string fmt.Scanln(&target)fmt.Scanln(&str)runes := []rune(str)reverse(runes[:len(runes)])reverse(runes[0:target])reverse(runes[target:len(runes)])fmt.Println(string(runes))
}
func reverse(b []rune){left := 0right := len(b) - 1for left < right {b[left],b[right] = b[right],b[left]left++right--} 
}

感悟:没有任何难度,三次翻转而已

6.28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)

                字符串匹配问题就要想到kmp

方法一:暴力解法就是遍历他们的起始位置

func strStr(haystack string, needle string) int {n, m := len(haystack), len(needle)// 特殊情况:needle 为空字符串,返回 0(按题目约定)if m == 0 {return 0}// 若 haystack 长度小于 needle,直接返回 -1if n < m {return -1}// 遍历所有可能的起始位置for i := 0; i <= n - m; i++ {// 检查从 i 开始的子串是否与 needle 匹配match := truefor j := 0; j < m; j++ {if haystack[i+j] != needle[j] {match = falsebreak}}if match {return i}}// 未找到匹配return -1
}

方法二:KMP

func getNext(next []int,s string){j := 0 //最长公共前后缀next[0] = j//前缀表数组for i := 1;i<len(s);i++{for j>0 && s[i] != s[j]{j = next[j-1]}if s[i] == s[j]{j++}next[i] = j}
}func strStr(haystack string, needle string) int {n := len(needle)if n == 0{return 0}j := 0next := make([]int,n)getNext(next,needle)for i := 0;i<len(haystack);i++{for j > 0 && haystack[i] != needle[j]{j = next[j-1]//回退到前一位}if haystack[i] == needle[j]{j++}if j == n{return i - j +1}}return -1
}

感悟:kmp生疏了,但是简单复习一遍之后,感觉更好理解了。

7.459. 重复的子字符串 - 力扣(LeetCode)

func repeatedSubstringPattern(s string) bool {n := len(s)if n == 0 {return false}j := 0next := make([]int, n)next[0] = jfor i := 1; i < n; i++ {for j > 0 && s[i] != s[j] {j = next[j-1]}if s[i] == s[j] {j++}next[i] = j}// next[n-1]  最长相同前后缀的长度if next[n-1] != 0 && n%(n-next[n-1]) == 0 {return true}return false
}

感悟:kmp的这两个题确实都需要二刷了,第一个是字符串匹配的问题,第二个是字符串中是否出现重复子串。只不过第一个要建立next,然后利用模式串和文本串的不断匹配去解决,j的含义不同。第二个相当于只建立next,然后通过next[n-1]去判断是否是否重复出现。但是最后的那个判断条件要熟能生巧。。。

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

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

相关文章

(!万字血书!)文本预处理:NLP 版 “给数据洗澡” 指南

好吧&#xff0c;我承认我是个标题党&#xff01;(不这样你会点进来享受这篇 通俗易懂 的好文章吗&#xff1f;) 正经标题&#xff1a;文本预处理全流程:从基础到实践 &#xff08;屏幕前的你&#xff0c;帅气低调有内涵&#xff0c;美丽大方很优雅… 所以&#xff0c;求…

最新chrome浏览器elasticsearch-head无法安装使用问题

chrome浏览器网址栏复制粘贴以下内容输入回车 chrome://flags/#allow-legacy-mv2-extensions 找到Allow legacy extension manifest versions项右侧选择Enabled启用&#xff0c;重启浏览器即可。

CSS aspect-ratio 属性

aspect-ratio 是 CSS 中用于控制元素宽高比的属性&#xff0c;通过一行代码即可实现响应式比例布局&#xff0c;无需复杂计算。它确保元素在不同屏幕尺寸下保持固定比例&#xff0c;提升响应式设计效率。一、基本语法与取值selector {aspect-ratio: <width> / <height…

FreeRTOS多核支持

个人博客&#xff1a;blogs.wurp.top 简介 1. 多核支持概述 在传统的单核系统中&#xff0c;FreeRTOS 通常运行在一个 CPU 核心上&#xff0c;负责任务调度、中断处理和资源管理。然而&#xff0c;在多核系统中&#xff0c;多个核心可以并行执行不同的任务或线程&#xff0c…

CUDA中的基本概念

要学习cuda的同学相信已经对其有一定的了解了&#xff0c;至少直到它是干什么的了。这篇文章主要是对cuda编程中的主要概念进行总结&#xff0c;有了一个大致的轮廓后就好入手了。 异构架构 异构架构即使用CPU和GPU共同进行计算。GPU不能作为一个独立的运行平台&#xff08;程序…

【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器

目录 1. 初识HTTP 2. URL 2.1 基本结构 2.2 URL中的?与urldecode\urlencode 易混淆&#xff1a;URL和HTTP传输请求两者是什么关系&#xff1f; HTTP的宏观结构 3. DEMO CODE loop模块&#xff0c;核心逻辑 HttpServer 初代版本&#xff08;DEMO 0.0&#xff09; DEMO 1.0 DEMO…

Spring Boot 静态函数无法自动注入 Bean?深入解析与解决方案

在 Spring Boot 项目中&#xff0c;开发者常遇到一个典型问题&#xff1a;在静态方法或静态变量中尝试使用 Autowired 注入 Bean 时&#xff0c;始终得到 null 值。本文将深入剖析这一问题的根源&#xff0c;并提供多种可靠解决方案。问题重现&#xff1a;为什么注入失败&#…

存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例

在企业级系统尤其是 SaaS 架构中&#xff0c;技术选型一旦确定&#xff0c;就意味着底层数据库类型基本不会轻易更换。既然如此&#xff0c;我们可以更大胆地将数据库能力本身纳入系统设计的核心&#xff0c;而不仅仅把它当成一个被动的存储引擎。存储过程&#xff08;Stored P…

Ubuntu20.04下Remmina的VNC密码忘记后重置

你遇到的错误&#xff1a; ** error creating password: /home/ysc/.vnc/passwd storepasswd: No such file or directory说明&#xff1a;x11vnc -storepasswd 无法创建密码文件&#xff0c;因为 .vnc 目录不存在。 虽然你可能以为路径是对的&#xff0c;但系统找不到 /home/y…

从“存得对”到“存得准”:MySQL 数据类型与约束全景指南

目录 一、为什么需要数据类型与约束&#xff1f; 二、MySQL 数据类型全览 1. 数值类型&#xff1a;精确 VS 近似 2. 日期时间类型&#xff1a;别让“0000-00-00”出现 3. 字符串类型&#xff1a;CHAR、VARCHAR、TEXT、BLOB 4. JSON 类型&#xff1a;文档与关系共舞 5. 空…

Effective C++ 条款42:了解 typename 的双重含义

Effective C 条款42&#xff1a;了解typename的双重含义 核心思想&#xff1a;在模板声明中&#xff0c;typename和class可互换使用&#xff0c;但在模板内部&#xff0c;typename必须用于显式指明嵌套从属类型名称&#xff08;nested dependent type name&#xff09;&#xf…

ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会

ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会2025年11月21-24日中国进出口商品交易会展馆D区(广州)AUTO TECH China 2025同期&#xff1a;第二十三届广州车展即将盛大开幕展商推荐ENCOPIM, S.L.展位号&#xff1a;3916企业简介&#xff1a;ENCOPIM, S.L.于…

30 HTB Soccer 机器 - 容易

主要知识点 第一阶段&#xff1a;侦查 nmap nmap快速扫描&#xff1a; oxdfhacky$ nmap -p- --min-rate 10000 10.10.11.194 Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-04 13:32 EDT Nmap scan report for 10.10.11.194 Host is up (0.093s latency). Not shown:…

阿里云机器翻译接口SDK-RAM权限配置

用户授权翻译权限在数字化时代&#xff0c;短信作为企业与用户沟通的重要桥梁&#xff0c;其高效、可靠的送达直接影响业务转化与用户体验。SDK&#xff08;软件开发工具包&#xff09;的出现极大简化了短信功能的集成过程&#xff0c;让开发者能够快速在应用中嵌入短信验证、通…

ESXI 6.7服务器时间错乱问题

1. 设置ESXI服务器&#xff1a;在此主机上手动配置日期和时间管理-服务-ntpd-鼠标右键-策略-手动启动和停止&#xff0c;状态已停止管理-系统-时间和日期-编辑设置-检查是否选择了【在此主机上手动配置日期和时间】ntp服务状态已停止ntp服务器已停止2. 停止所有虚拟机自动更新时…

CV 医学影像分类、分割、目标检测,之【皮肤病分类】项目拆解

CV 医学影像分类、分割、目标检测&#xff0c;之【皮肤病分类】项目拆解第1-12行&#xff1a;导入库第14-17行&#xff1a;读取标签文件第19-21行&#xff1a;获取疾病名称第23-26行&#xff1a;获取图片名列表第28-35行&#xff1a;筛选有标签的图片第38-43行&#xff1a;提取…

【JavaEE】多线程 -- 线程状态

目录六大状态举例说明六大状态 New 新建状态&#xff1a;线程还没出创建&#xff0c;只有Thread 实例化的对象&#xff0c;调用start 方法之前的状态。Runnable 运行状态&#xff1a;被系统调度后&#xff0c;CPU 正在执行的&#xff0c;Ready 就绪态&#xff0c;系统调度&…

网络流初步

网络流初步 文章目录网络流初步概念介绍最大流费用流概念介绍 网络流不同之处在于它的本质图论&#xff0c;但是把图论的某些概念换了一个说法而已&#xff0c;初步只要了解网络流的各个概念就可以明白的很快。 下述概念是本人自己定义的&#xff0c;对于网络流的题目做的还不…

[系统架构设计师]系统架构基础知识(一)

[系统架构设计师]系统架构基础知识&#xff08;一&#xff09; 一.计算机系统基础知识 1.计算机系统概述 硬件软件及网络组成的系统 2.计算机硬件基础知识 冯 诺依曼结构&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备 专用…

深入解析Java代理模式:灵活控制对象访问的核心技术

在日常开发中&#xff0c;我们常遇到这样的场景&#xff1a;需要控制对象访问权限、优化高成本操作&#xff0c;或给方法添加额外功能&#xff08;如日志、事务&#xff09;。代理模式&#xff08;Proxy Pattern&#xff09; 正是解决这类问题的金钥匙。作为结构型设计模式的代…