利用golang的字符串解決leetcode翻轉(zhuǎn)字符串里的單詞
題目
給定一個字符串,逐個翻轉(zhuǎn)字符串中的每個單詞。
示例 1:
輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:
輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。
示例 3:
輸入: "a good example"
輸出: "example good a"
解釋: 如果兩個單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個。
說明:
無空格字符構(gòu)成一個單詞。
輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。
如果兩個單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個。
解法一
全部使用golang的strings包里的方法來解題。
func reverseWords(s string) string {
var reverseSeg []string
//獲取去除空格后的單詞數(shù)組
seg := strings.Fields(s)
//翻轉(zhuǎn)單詞數(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++
}
}
//翻轉(zhuǎn)有效單詞
for i := 0; i < n/2; i++ {
sL[i], sL[n-i-1] = sL[n-i-1], sL[i]
}
//返回由空格間隔的有效單詞字符串
return strings.Join(sL[:n], " ")
}
總結(jié)
熟練掌握golang的strings包自帶函數(shù)
leetcode題解中還有一個雙百的go解法,必須極其了解golang語言才能理解,所以再接再厲。
補充:Golang 翻轉(zhuǎn)含有中文、數(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
}
結(jié)果如下:

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
}
結(jié)果如下,亂碼了

總結(jié):
rune(-2^31 ~ 2^31-1)是int32的別名,比起byte(-128~127),rune可表示的范圍更大,所以能處理一切字符,當(dāng)然也包括中文字符。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Golang中基于HTTP協(xié)議的網(wǎng)絡(luò)服務(wù)
HTTP協(xié)議是基于TCP/IP協(xié)議棧的,并且它也是一個面向普通文本的協(xié)議。這篇文章主要詳細(xì)介紹了Golang中基于HTTP協(xié)議的網(wǎng)絡(luò)服務(wù),感興趣的小伙伴可以借鑒一下2023-04-04
go責(zé)任鏈行為型設(shè)計模式Chain?Of?Responsibility
這篇文章主要為大家介紹了go行為型設(shè)計模式之責(zé)任鏈Chain?Of?Responsibility使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
深入探討Golang中如何進(jìn)行并發(fā)發(fā)送HTTP請求
在?Golang?領(lǐng)域,并發(fā)發(fā)送?HTTP?請求是優(yōu)化?Web?應(yīng)用程序的一項重要技能,本文探討了實現(xiàn)此目的的各種方法,文中的示例代碼講解詳細(xì),希望對大家有所幫助2024-01-01

