Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶

2024-01-18 03:44

本文主要是介绍Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

翻转字符串中的单词 leetcode151

常规做法 双指针

func reverseWords(s string) string {
WordList := []string{}
left := 0
L := len(s)
//fmt.Println(L)for i, i2 := range s {//去除重复的空格if i > 0 && s[i-1] == ' ' && i2 == ' ' {left++continue}//不为空格时右指针移动,并且如果最后一位也为字母时添加到存储表if i2 != ' ' {if i == L-1 {WordList = append(WordList, s[left:i+1])}} else { //当为空格时,将当前的左右指针对应的单词放入存储表,同时给左指针赋值if i != 0 {WordList = append(WordList, s[left:i])}left = i + 1}}S := WordList[0]for i, s2 := range WordList {if i != 0 {S = s2 + " " + S}}return S
}

进阶做法 空间复杂度O(1)

解题思路如下:

  • 移除多余空格
  • 将整个字符串反转
  • 将每个单词反转
func reverseWords(s string) string {// 1.去除字符串中多余的空格b := []byte(s) //将字符串转换为字符切片slow, l := 0, len(b)for fast := 0; fast < l; fast++ {if b[fast] != ' ' { //直接让fast指针移动到第一个字母的位置if slow != 0 { //排除字符串开头的空格b[slow] = ' ' //保留单词间的空格slow++}for fast < l && b[fast] != ' ' {b[slow] = b[fast]slow++fast++}}}b = b[:slow] //取slow之前的字符串// 2.反转整体字符串reverse(b)// 3.反转每个单词last := 0 //慢指针l = len(b)for i := 0; i <= l; i++ { //注意这里是i<=lif i == l || b[i] == ' ' { //当i等于字符串长度或者值为空,i==l必须写在前面因为b[l]不存在会报错reverse(b[last:i]) //反转每个单词,左闭右开last = i + 1}}return string(b) //将字符切片转换为字符串
}
func reverse(s []byte) {
L := len(s)
//双指针
left, right := 0, L-1for left < right {
s[left], s[right] = s[right], s[left]
left++
right--
}
}

这篇关于Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618007

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu