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

时间:2021-05-22

题目

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

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

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章