利用golang的字符串解决leetcode翻转字符串里的单词

作者:程序员早早 时间:2023-07-17 16:36:21 

题目

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:

输入: "the sky is blue"

输出: "blue is sky the"

示例 2:

输入: " hello world! "

输出: "world! hello"

解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

输入: "a good example"

输出: "example good a"

解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

无空格字符构成一个单词。

输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

解法一

全部使用golang的strings包里的方法来解题。


func reverseWords(s string) string {
var reverseSeg []string
//获取去除空格后的单词数组
seg := strings.Fields(s)
//翻转单词数组
for i := len(seg)-1;i>=0;i-- {
 reverseSeg = append(reverseSeg,seg[i])
}
//数组-》由空格间隔的字符串
return strings.Join(reverseSeg," ")
}

解法二


func reverseWords(s string) string {
var result string
//获取去除空格后的单词数组
str := strings.Split(s," ")
//倒序组装单词和空格
for i:=len(str)-1;i>=0;i-- {
 if len(str[i])==0 {
  continue
 }
 result += str[i]+" "
}
if len(result)==0 {
 return ""
}
return result[:len(result)-1]
}

解法三


func reverseWords(s string) string {
sL := strings.Split(s, " ")
c := len(sL)
n := 0//表示实际有效单词的长度
i := 0//数组长度
for {
if i >= c {
break
}
if sL[i] == "" {
i++
continue
} else {
//将有效单词前移
sL[n], sL[i] = sL[i], sL[n]
n++
i++
}
}
//翻转有效单词
for i := 0; i < n/2; i++ {
sL[i], sL[n-i-1] = sL[n-i-1], sL[i]
}
//返回由空格间隔的有效单词字符串
return strings.Join(sL[:n], " ")
}

总结

熟练掌握golang的strings包自带函数

leetcode题解中还有一个双百的go解法,必须极其了解golang语言才能理解,所以再接再厉。

补充:Golang 翻转含有中文、数字、英文字母的字符串

rune表示:


package main
import "fmt"
func main() {
src := "你好啊,XXX啊啊啊啊"
dst := reverse([]rune(src))
fmt.Println("result is:",string(dst))
}
func reverse(s []rune) []rune {
for i,j :=0,len(s)-1;i<j;i,j = i+1,j-1{
s[i],s[j] = s[j],s[i]
}
return s
}

结果如下:

利用golang的字符串解决leetcode翻转字符串里的单词

byte表示:


package main
import "fmt"
func main() {
src := "你好啊,XXX啊啊啊啊"
dst := reverse([]byte(src))
fmt.Println("result is:",string(dst))
}
func reverse(s []byte) []byte {
for i,j :=0,len(s)-1;i<j;i,j = i+1,j-1{
s[i],s[j] = s[j],s[i]
}
return s
}

结果如下,乱码了

利用golang的字符串解决leetcode翻转字符串里的单词

总结:

rune(-2^31 ~ 2^31-1)是int32的别名,比起byte(-128~127),rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。

来源:https://blog.csdn.net/helen920318/article/details/105425985

标签:golang,leetcode,字符串,单词
0
投稿

猜你喜欢

  • javascript农历日历及世界时间代码

    2007-12-21 13:25:00
  • mvc中form表单提交的三种方式(推荐)

    2024-04-18 10:55:33
  • 真正好用的js验证上传文件大小的简单方法

    2024-04-22 13:04:52
  • Windows系统下安装GIt及GIT基本认识和配置

    2023-06-14 20:54:53
  • php下实现伪 url 的超简单方法[转]

    2024-05-02 17:08:18
  • Python中如何创建多线程?

    2022-11-25 15:52:34
  • Python编程入门指南之函数

    2021-05-13 15:45:31
  • 详解pyenv下使用python matplotlib模块的问题解决

    2023-08-08 20:25:01
  • python中找出numpy array数组的最值及其索引方法

    2022-11-26 14:24:00
  • 利用canvas实现的加载动画效果实例代码

    2023-06-29 22:49:51
  • JDBC数据库连接过程及驱动加载与设计模式详解

    2024-01-27 06:46:47
  • Python3中.whl文件创建及使用

    2022-11-05 00:17:50
  • splice slice区别

    2024-04-18 10:32:12
  • 基于pandas中expand的作用详解

    2022-02-04 06:53:53
  • Golang函数这些神操作你知道哪些

    2024-04-26 17:22:15
  • 详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法

    2021-04-13 08:17:01
  • 使用11行Python代码盗取了室友的U盘内容

    2021-04-05 04:08:21
  • sqlserver 禁用触发器和启用触发器的语句

    2024-01-19 21:38:17
  • 玩转Python图像处理之二值图像腐蚀详解

    2022-09-01 16:23:24
  • python调用cmd复制文件代码分享

    2022-12-26 11:18:22
  • asp之家 网络编程 m.aspxhome.com