// Source : https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/ // Date : 2021-11-24
/************************************************************************************** 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:“Let’s take LeetCode contest” 输出:“s’teL ekat edoCteeL tsetnoc”
提示:
在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 **************************************************************************************/
/******************************************************************************************************* 题目分析: 因为题目要求翻转每个单词的顺序,因此需要筛选出每个单词,然后对其进行翻转,之后将下标移动到下一个单词的开始位置,然后继续翻转该单词的每个字符顺序;注意,因为本代码利用空格进行单词的划分,因此要处理下一个单词的时候需要将下标后移一位,否则下标会停留在空格处导致下一次下标的移动失败。 ********************************************************************************************************/
class Solution {
public:
string reverseWords(string s) {
int length = s.length(), i = 0;
while (i < length)
{
int start = i;
while (i < length && s[i] != ' ')
i++;
int left = start, right = i - 1;
while (left < right)
{
swap(s[left], s[right]);
left++;
right--;
}
i++;
}
return s;
}
};
|