题目
给定一个字符串,逐个翻转字符串中的每个单词。
示例 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可表示的范围更大,所以能处理一切字符,当然也包括中文字符。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。