151. 翻转字符串里的单词

翻转字符串里的单词

题目描述:

给定一个字符串,逐个翻转字符串中的每个单词。

说明:

无空格字符构成一个 单词 。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

示例 1:

输入:”the sky is blue”
输出:”blue is sky the”
示例 2:

输入:” hello world! “
输出:”world! hello”
解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:

输入:”a good example”
输出:”example good a”
解释:如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例 4:

输入:s = “ Bob Loves Alice “
输出:”Alice Loves Bob”
示例 5:

输入:s = “Alice does not even like bob”
输出:”bob like even not does Alice”

思路:

还是自己太垃圾,字符串类型的题目不行了

要先把前面的空格和后面的空格去掉,这这之间把字符串之间的空格控制在1个,然后用spilt函数分割字符串,然后倒转,再用join合起来

代码:

func reverseWords(s string) string {
    if s==""{
        return ""
    }
    str := clearSpace(s)
    var str1 string
    ss :=strings.Split(string(str)," ")

    for i:=0;i<len(ss)/2;i++{
        ss[i],ss[len(ss)-1-i] = ss[len(ss)-1-i],ss[i]
    }
    if len(ss[0])==0{
ss = append(ss[:0],ss[1:]...)
    }
    
    str1 = strings.Join(ss," ")

    return  str1
}
func clearSpace(s string)string{
    var str []byte
    var i int
    j  :=len(s)-1
    for i<len(s)&&s[i]==' '{
        i++
    }
    flag :=1
    for ;i<=j;i++{
        if s[i]!=' '{
            str = append(str,s[i])
            flag=0
        }
        if s[i]==' '&&flag==0{
            flag=1
            str = append(str,s[i])
        }
    }
    return  string(str)
}

代码效率:

执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:3.1 MB, 在所有 Go 提交中击败了63.42%的用户