[Golang]力扣Leetcode—剑指Offer—字符串—58 - I. 翻转单词顺序(库函数)
[Golang]力扣Leetcode—剑指Offer—字符串—58 - I. 翻转单词顺序(库函数)
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
链接: 力扣Leetcode—剑指Offer—字符串—58 - I. 翻转单词顺序.
示例 1:
输入: “the sky is blue”
输出: “blue is sky the”
示例 2:
输入: " hello world! "
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: “a good example”
输出: “example good a”
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:法一:用库函数
- 用 strings.TrimSpace(s) 去除字符串前后的空格
- 用 strings.Split 分割字符串存为一个 []string “b”
- 将 b 中的字符串翻转
- 遍历翻转后的字符串,将不为 “” 的字符串加入 res 字符串切片中
- 将 res 字符串切片连接为一个字符串,之间用 " " 来分隔。
法二:最死板的方法
- 先去掉空格
- 再反转字符串
- 最后反转单词
法一Go代码:
package main import ( "fmt" "strings" ) func reverseWords(s string) string { var res []string a := strings.TrimSpace(s) // 去除字符串前后的空格 b := strings.Split(a, " ") // 分割字符串存为一个[]string //字符串翻转 for i := 0; i < len(b)>>1; i++ { b[i], b[len(b)-1-i] = b[len(b)-1-i], b[i] } //处理字符串中间的空格,遍历翻转后的字符串,将不为""的字符串加入 res 字符串切片中 for i, _ := range b { if b[i] != "" { res = append(res, b[i]) } } //将字符串切片连接为一个字符串,之间用 " " 来分隔。 return strings.Join(res, " ") } func main() { fmt.Println(reverseWords("the sky is blue.")) }
提交截图:
法二Go代码:
package main import ( "fmt" ) func reverseWords(s string) string { // 去掉空格 removeEmpty := func(s string) []byte { left, right := 0, len(s)-1 // 去掉头空格 for left <= right && s[left] == ' ' { left++ } // 去掉尾空格 for left <= right && s[right] == ' ' { right-- } // 去掉中间空格 sb := make([]byte, 0) for left <= right { if s[left] != ' ' { sb = append(sb, s[left]) // 为空格且末尾不为空格 } else if sb[len(sb)-1] != ' ' { sb = append(sb, s[left]) } left++ } return sb } // 反转字符串 reverseString := func(sb []byte, left, right int) { for ; left <= right; left, right = left+1, right-1 { sb[left], sb[right] = sb[right], sb[left] } } // 反转单词 reverseWords := func(sb []byte) { start, end, n := 0, 0, len(sb)-1 for start <= n { for end <= n && sb[end] != ' ' { end++ } // end为空格 reverseString(sb, start, end-1) start, end = end+1, end+1 } } sb := removeEmpty(s) reverseString(sb, 0, len(sb)-1) reverseWords(sb) return string(sb) } func main() { fmt.Println(reverseWords("the sky is blue.")) }
提交截图:
本文作者:Dancing-Pierre
本文链接:https://www.cnblogs.com/wyc-1009/p/17548091.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步