利用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 //獲取去除空格后的單詞數(shù)組 seg := strings.Fields(s) //翻轉單詞數(shù)組 for i := len(seg)-1;i>=0;i-- { reverseSeg = append(reverseSeg,seg[i]) } //數(shù)組-》由空格間隔的字符串 return strings.Join(reverseSeg," ") }
解法二
func reverseWords(s string) string { var result string //獲取去除空格后的單詞數(shù)組 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//數(shù)組長度 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包自帶函數(shù)
leetcode題解中還有一個雙百的go解法,必須極其了解golang語言才能理解,所以再接再厲。
補充:Golang 翻轉含有中文、數(shù)字、英文字母的字符串
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可表示的范圍更大,所以能處理一切字符,當然也包括中文字符。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
go語言搬磚之go jmespath實現(xiàn)查詢json數(shù)據(jù)
這篇文章主要為大家介紹了go語言搬磚之go jmespath實現(xiàn)查詢json數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Golang語言JSON解碼函數(shù)Unmarshal的使用
本文主要介紹了Golang語言JSON解碼函數(shù)Unmarshal的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01Golang連接PostgreSQL基本操作的實現(xiàn)
PostgreSQL是常見的免費的大型關系型數(shù)據(jù)庫,本文主要介紹了Golang連接PostgreSQL基本操作的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-02-02