leetcode 151 翻轉字串裡的單詞

2021-10-02 19:14:52 字數 1683 閱讀 9578

給定乙個字串,逐個翻轉字串中的每個單詞。

示例 1:

輸入: 「the sky is blue」

輸出: 「blue is sky the」

示例 2:

輸入: " hello world! "

輸出: 「world! hello」

解釋: 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。

示例 3:

輸入: 「a good example」

輸出: 「example good a」

解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含乙個。

說明:無空格字元構成乙個單詞。

輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。

如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含乙個。

高階:請選用 c 語言的使用者嘗試使用 o(1) 額外空間複雜度的原地解法。

1.將字串中的每個單詞都儲存在棧中,然後再從棧中拿出單詞構成新的字串。

空間複雜度o(n)

時間複雜度o(n)

// c++ version

// 利用字元流(sstream)可以更加方便的解決空格問題

class

solution

}while

(!sc.

empty()

)return res.

size()

==0? res :

string

(res.

begin()

, res.

end()-

1);}

};class

solution

// 避免res為空字串帶來的錯誤

return res.

size()

== res ?"":

string

(res.

begin()

, res.

end()-

1);}

};

2.先將整個字串反轉,然後再逐單詞反轉。

時間複雜度o(n)

空間複雜度o(1)

// c++ version

class

solution

// 處理中間空格

l = head;

for(

int i = head; i <= tail ; i++

)return

string

(s.begin()

+ head, s.

begin()

+ l);}

};

// c version

void

reverse

(char

* s,

int x,

int y)

}char

*reversewords

(char

* s)

l =0;

for(

int i = head; i <= tail ; i++

) s[l]

='\0'

;return s;

}

LeetCode 151 翻轉字串

給定乙個字串,逐個翻轉字串中的每個單詞。示例 1 輸入 the sky is blue 輸出 blue is sky the 示例 2 輸入 hello world 輸出 world hello 解釋 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。示例 3 輸入 a good ...

Leetcode 151 翻轉字串

給定乙個字串,逐個翻轉字串中的每個單詞。示例 1 輸入 the sky is blue 輸出 blue is sky the 示例 2 輸入 hello world 輸出 world hello 解釋 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。示例 3 輸入 a good ...

leetcode151翻轉字串單詞

leetcode151.翻轉字串裡的單詞 題目描述 給定乙個字串,逐個翻轉字串中的每個單詞 示例 輸入 the sky is blue 輸出 blue is sky the 再這裡需要逐一的是輸入的字串可以在前面或者後面包含多餘的空格,但反轉後的單詞間的空格只能減少到乙個。思路 在這裡考慮進行兩次翻...