Skip to content

Latest commit

 

History

History
57 lines (44 loc) · 1.35 KB

73.md

File metadata and controls

57 lines (44 loc) · 1.35 KB

翻转单词序列

题目

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

进阶:空间复杂度 O(n),时间复杂度 O(n),保证没有只包含空格的字符串

示例

输入:"nowcoder. a am I"

返回值:"I am a nowcoder."

思路

从不是空格的字符开始到是空格的前一个字符结束,即为一个单词

实现

package main

import "fmt"

// 翻转单词序列
func main() {
	raw := "nowcoder. a am I"
	res := ReverseSentence(raw)
	fmt.Println(res)
}

func ReverseSentence(str string) string {
	if str == "" {
		return str
	}
	ret := ""
	tmp := ""
	isWord := false
	for i := len(str) - 1; i >= 0; i-- {
		if string(str[i]) != " " {
			// 合并一个单词
			tmp = string(str[i]) + tmp
			isWord = true
		} else if string(str[i]) == " " && isWord {
			// 找到一个单词,将单词合并到结果串中
			ret = ret + tmp + " "
			tmp = ""
			isWord = false
		}
	}
	if tmp != "" {
		ret += tmp
	}
	return ret
}