1. 程式人生 > 其它 >劍指offer(58)-I

劍指offer(58)-I

劍指offer(58)-I

劍指 Offer 58 - I. 翻轉單詞順序

難度簡單203

輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。

示例 1:

輸入: "the sky is blue"
輸出: "blue is sky the"

示例 2:

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

示例 3:

輸入: "a good   example"
輸出: "example good a"
解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

說明:

  • 無空格字元構成一個單詞。
  • 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
  • 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

從後向前遍歷,利用兩個指標端點即可

class Solution {
public:
    string reverseWords(string s) {
        int n = s.size();
        //雙端指標即可 從後向前遍歷 去反轉字詞
        string ans = "";
        for (int i = n - 1; i >= 0; i--) {
            if (s[i] != ' ') {
                int right = i;
                while (i >= 0 && s[i] != ' ') {
                    i--;
                }
                ans += s.substr(i + 1, right - i) + " ";
            }
        }
        //ans.size()-1是因為最後有一個空格
        return ans.substr(0, ans.size() - 1);
    }
};