主页 > 知识库 > 利用golang的字符串解决leetcode翻转字符串里的单词

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

热门标签:仙桃400电话办理 上海极信防封电销卡价格 郑州智能语音电销机器人价格 宿迁便宜外呼系统代理商 地图标注免费定制店 不封卡外呼系统 重庆庆云企业400电话到哪申请 湛江crm外呼系统排名 宁波语音外呼系统公司

题目

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

示例 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;ij;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;ij;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可表示的范围更大,所以能处理一切字符,当然也包括中文字符。

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

您可能感兴趣的文章:
  • LeetCode -- Path Sum III分析及实现方法
  • 基于Java实现杨辉三角 LeetCode Pascal''s Triangle
  • vscode刷acm、leetcode的题目
  • 如何用C++制作LeetCode刷题小技巧-错题记录本
  • Java实现LeetCode(报数)

标签:电子产品 海南 青海 辽宁 安康 西双版纳 物业服务 儋州

巨人网络通讯声明:本文标题《利用golang的字符串解决leetcode翻转字符串里的单词》,本文关键词  利用,golang,的,字符串,解决,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《利用golang的字符串解决leetcode翻转字符串里的单词》相关的同类信息!
  • 本页收集关于利用golang的字符串解决leetcode翻转字符串里的单词的相关信息资讯供网民参考!
  • 推荐文章