腾讯精选练习(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%的用户
在这里插入图片描述

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