題目
給定一個字符串,你需要反轉字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。
示例 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%的用戶