牛客最近来了一个新员工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
}