• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用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;ij;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;ij;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可表示的范围更大,所以能处理一切字符,当然也包括中文字符。

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

    您可能感兴趣的文章:
    • LeetCode -- Path Sum III分析及实现方法
    • 基于Java实现杨辉三角 LeetCode Pascal''s Triangle
    • vscode刷acm、leetcode的题目
    • 如何用C++制作LeetCode刷题小技巧-错题记录本
    • Java实现LeetCode(报数)
    上一篇:golang解析yaml文件操作
    下一篇:golang 各种排序大比拼实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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