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

相关文章

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

golang实现nacos获取配置和服务注册-支持集群详解

《golang实现nacos获取配置和服务注册-支持集群详解》文章介绍了如何在Go语言中使用Nacos获取配置和服务注册,支持集群初始化,客户端结构体中的IpAddresses可以配置多个地址,新客户... 目录golang nacos获取配置和服务注册-支持集群初始化客户端可选参数配置new一个客户端 支

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、