Skip to content

Latest commit

 

History

History
52 lines (44 loc) · 1.26 KB

58 - I. 翻转单词顺序.md

File metadata and controls

52 lines (44 loc) · 1.26 KB

解题思路

1. 双指针

记录下遇到的第一个非空格字符,和第一个空格字符,它们之间就是单词

func reverseWords(s string) string {
    s = strings.Trim(s, " ")
    idx := 0
    str := ""
    for idx < len(s) {
        // 找到第一个非空格字符
        for idx < len(s) && s[idx] == ' ' {
            idx++
        }
        start := idx
        // 找到第一个空格字符
        for idx < len(s) && s[idx] != ' ' {
            idx++
        }
        end := idx
        // 如果大小不相等,说明中间有单词,加入 str 结果
        if start != end {
            str = s[start:end] + " " + str
        }
    }
    return strings.Trim(str, " ")
}

2. 使用内置函数

strings.Fields(s):将字符串 s 按一个或多个空格拆分字符串 strings.Join(str, " "):将字符切片 str 内元素以 " " 为分隔符进行连接

func reverseWords(s string) string {
    // 将 s 按空格拆分成单词数组
    str := strings.Fields(s)
    // 转置单词位置
    for i := 0; i < len(str)/2; i++ {
        str[i], str[len(str)-i-1] = str[len(str)-i-1], str[i]
    }
    // 以空格为分隔符区分单词
    return strings.Join(str, " ")
}