leetcode题目-翻转字符串里的单词
151. 翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。
说明:
- 无空格字符构成一个 单词 。
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-words-in-a-string
go语言实现:
func reverseWords(s string) string {
if len(s) == 0 || !strings.ContainsRune(s, ' ') {
return s
}
var sb strings.Builder
var start int
var end = -1
for i := len(s) - 1; i >= 0; i-- { //从右往左遍历
if s[i] != ' ' { //遇到非空格字符
if end == -1 { //设置end
end = i + 1
}
}
if end != -1 { //已经设置了end
if s[i] == ' ' { //遇到空格
start = i+1 //设置start
sb.WriteString(s[start:end]) //写入单词
sb.WriteRune(' ') //再写入一个空格
end = -1
continue
}
if i == 0 { //没遇到空格但是到结尾了
sb.WriteString(s[0:end]) //写入单词
sb.WriteRune(' ') //写入空格
}
}
}
return sb.String()[0: len(sb.String()) - 1] //去掉最后一个空格
}