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

 更新时间:2020年12月24日 09:08:17   作者:程序员早早  
这篇文章主要介绍了利用golang的字符串解决leetcode翻转字符串里的单词,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

题目

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

示例 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
}

结果如下:

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
}

结果如下,乱码了

总结:

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 解决老版本goland无法调试新版本go的问题

    解决老版本goland无法调试新版本go的问题

    这篇文章主要给大家介绍了如何解决老版本goland无法调试新版本go的问题,文中通过代码示例给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11
  • Go用两个协程交替打印100以内的奇偶数的方法详解

    Go用两个协程交替打印100以内的奇偶数的方法详解

    这篇文章主要给大家详细介绍了Go用两个协程交替打印100以内的奇偶数的示例代码,文中给大家介绍了两个实现方法,使用无缓冲的channel和设置GOMAXPROCS=1,介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • go语言实现http服务端与客户端的例子

    go语言实现http服务端与客户端的例子

    今天小编就为大家分享一篇go语言实现http服务端与客户端的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 使用gRPC实现获取数据库版本

    使用gRPC实现获取数据库版本

    这篇文章主要为大家详细介绍了如何使用gRPC实现获取数据库版本,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 使用go gin来操作cookie的讲解

    使用go gin来操作cookie的讲解

    今天小编就为大家分享一篇关于使用go gin来操作cookie的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Go reflect 反射原理示例详解

    Go reflect 反射原理示例详解

    这篇文章主要为大家介绍了Go reflect 反射原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Go语言数据结构之单链表的实例详解

    Go语言数据结构之单链表的实例详解

    链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。本文将通过五个例题带大家深入了解Go语言中单链表的用法,感兴趣的可以了解一下
    2022-08-08
  • Go语言中函数的使用方法详解

    Go语言中函数的使用方法详解

    这篇文章主要为大家详细介绍了Go语言中函数的使用方法的相关资料,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,感兴趣的可以了解一下
    2023-04-04
  • 详解Golang中Requests包的使用

    详解Golang中Requests包的使用

    Go的net/http包虽然功能强大、用途也广告,但要想正确的使用请求的客户端是非常繁琐的,所以本文和大家分享一个高效的HTTP的请求包carlmjohnson/requests的使用,需要的小伙伴可以了解一下
    2023-06-06
  • Golang语言的跨平台UI工具包fyne使用详解

    Golang语言的跨平台UI工具包fyne使用详解

    这篇文章主要为大家介绍了Golang语言的跨平台UI工具包fyne使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论