题干
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意: 输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
题解
利用栈先进后出的思想,正向遍历整个字符串,找到一个单词就把它入栈,遍历整个字符串后,再将栈中的元素一个一个出栈,加到结果字符串的后面就得到了最后的答案。但是因为题目要求空间复杂度为O(1),因此可以使用一个滚动的变量记录当前得到的单词,找到一个单词就把它加到答案的前面。
func reverseWords(s string) string {
ans := ""
word := ""
n := len(s)
for i := 0; i <= n; i++ {
if i != n && s[i] != ' ' {
word += string(s[i])
} else if word != "" {
if ans == "" {
ans = word
} else {
ans = word + " " + ans
}
word = ""
}
}
return ans
}