给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
来源:力扣(LeetCode)
双指针 (原地修改)
void
swap(char *a, char *b)
{
char tmp = *a;
*a = *b;
*b = tmp;
}
char
* reverseWords(char * s)
{
int len = strlen (s);
int i = 0;
while (i < len)
{
int start = i;
// 以空白符为界, 分割为一个个小数组区域
while (i < len&&s[i] != ' ')
{
i ++;
}
int left = start;
int right = i - 1;
while (left < right)
{
swap (s + left, s + right);
left ++;
right --;
}
// 遇到空白符, 行动指令
while (i < len&&s[i] == ' ')
{
i ++;
}
}
return s;
}
申请额外数组
char
* reverseWords(char * s)
{
int len = strlen (s);
char *ans = (char *)malloc (sizeof (char) * (len + 1));
ans[len] = 0;
int i = 0;
while (i < len)
{
int start = i;
while (s[i] != ' '&&i < len)
{
i ++;
}
// 以空白符, 逆序输出新数组
for (int j = start; j < i; j ++)
{
ans[j] = s[start + i - j - 1];
}
while (i < len&&s[i] == ' ')
{
ans[i] = ' ';
i ++;
}
}
return ans;
}