yankewei / LeetCode

LeetCode 问题的解决方法
MIT License
6 stars 0 forks source link

557. 反转字符串中的单词 III #55

Open yankewei opened 4 years ago

yankewei commented 4 years ago

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例:

输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

提示:

在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii

yankewei commented 4 years ago

转为数组,然后拼接字符串

我们可以从字符串尾部向前遍历字符串,把每个字符写入数组,如果遇到空格,则转换数组,拼接字符串,最后返回拼接的字符串就可以。

func reverseWords(s string) string {
    var ret string
    var byteArr []byte
    for i := len(s) - 1; i >= 0; i-- {
    if s[i] != 32 {
        byteArr = append(byteArr, s[i])
    } else {
        ret = " " + string(byteArr) + ret
        byteArr = []byte{}
    }
    }
    return string(byteArr) + ret
}

对字符串进行切割,然后翻转每一个元素

func reverseWords(s string) string {
    sArr := strings.Split(s, " ")
    for i, v := range sArr {
    sArr[i] = reverse([]byte(v), 0, len(v)-1)
    }
    return strings.Join(sArr, " ")
}

func reverse(s []byte, start, end int) string {
    for start < end {
        s[end], s[start] = s[start], s[end]
    start++
    end--
    }
    return string(s)
}