LeetCode 151.反转字符串中的单词【中等】

50 阅读1分钟

题干

给你一个字符串 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
}