题目
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一
全部使用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语言才能理解,所以再接再厉