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实现将HTML文件与字符串转换为图片

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

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

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

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1