騰訊精選練習(50/50) : 反轉字符串中的單詞 III(LeedCode 557)(完結)

題目

給定一個字符串,你需要反轉字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。

示例 1:

輸入: "Let's take LeetCode contest"
輸出: "s'teL ekat edoCteeL tsetnoc" 

注意:在字符串中,每個單詞由單個空格分隔,並且字符串中不會有任何額外的空格。


代碼實現

方法一:雙指針法

public class Solution 
{
    public string ReverseWords(string s) 
    {
        int Head = 0, Rear = 0;
        string Ans = "";
        
        for(int i = 0; i < s.Length; i++)
            if(i == s.Length - 1 || s[i + 1] == ' ')
            {
                Rear = i;
                for(int j = Rear; j > Head - 1; --j)
                    Ans += s[j];
                Ans += " ";
                Head = i + 2;
            }   
        return Ans.Substring(0,s.Length);
    }
}

方法二:雙指針法+異或交換法

class Solution {
public:
    string reverseWords(string s) 
    {
        int Head = 0, Rear = 0;
        
        for(int i = 0; i < s.size(); i++)
            if(s[i] == ' ')
            {
                Rear = i - 1;
                while (Head < Rear) 
                {
                    s[Head] ^= s[Rear];
                    s[Rear] ^= s[Head];
                    s[Head++] ^= s[Rear--];
                }
                Head = i + 1;
            }
        
        Rear = s.size() - 1;
        while (Head < Rear) 
        {
            s[Head] ^= s[Rear];
            s[Rear] ^= s[Head];
            s[Head++] ^= s[Rear--];
        }
        return s;
    }
};

實驗結果

方法一:雙指針法

執行結果:超出時間限制在這裏插入圖片描述

執行結果:通過
執行用時 :16 ms, 在所有 C++ 提交中擊敗了97.44%的用戶
內存消耗 :11.6 MB, 在所有 C++ 提交中擊敗了93.98%的用戶
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章