天天看點

Leetcode 第151題 最新題解 Reverse Words in a String

Reverse Words in a String

  Total Accepted: 67  Total Submissions: 412 My Submissions

Given an input string, reverse the string word by word.

For example,

Given s = "

the sky is blue

",

return "

blue is sky the

".

click to show clarification.

Clarification:

  • What constitutes a word?

    A sequence of non-space characters constitutes a word.

  • Could the input string contain leading or trailing spaces?

    Yes. However, your reversed string should not contain leading or trailing spaces.

  • How about multiple spaces between two words?

    Reduce them to a single space in the reversed string.

Leetcode 很久沒有更新題目了。太巧了,今天剛剛說150道題結貼,就出新題了,呵呵。

好吧,第一時間貼上來。

思路:

1 從後往前周遊string

2 儲存單詞,然後需要逆轉,在儲存到結果中

注意題目中的clarification,處理好其中的空格。

利用了兩個額外string儲存中間結果。空間複雜度為O(n).

時間複雜度是O(n),簡單題目:2到3星級

void reverseWords(string &s)
	{
		string rs;
		for (int i = s.length()-1; i >= 0; )
		{
			while (i >= 0 && s[i] == ' ') i--;
			if (i < 0) break;
			if (!rs.empty()) rs.push_back(' ');
			string t;
			while (i >= 0 && s[i] != ' ') t.push_back(s[i--]);
			reverse(t.begin(), t.end());
			rs.append(t);
		}
		s = rs;
	}