1. 程式人生 > 程式設計 >利用golang的字串解決leetcode翻轉字串裡的單詞

利用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
 //獲取去除空格後的單詞陣列
 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
}

結果如下:

利用golang的字串解決leetcode翻轉字串裡的單詞

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,s[i]
 }
 return s
}

結果如下,亂碼了

利用golang的字串解決leetcode翻轉字串裡的單詞

總結:

rune(-2^31 ~ 2^31-1)是int32的別名,比起byte(-128~127),rune可表示的範圍更大,所以能處理一切字元,當然也包括中文字元。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。