问题描述
Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
题目分析
本题要求将一个句子中每个单词的字母逆序排列,而句子中单词的相对位置并不发生变化。其中,单词与单词之间使用单个空格隔开。
解题思路
单词之间以空格隔开,因此通过空格来确定每个单词,然后将单词中的字母逆序排列。对于第一个单词起始位置为零,直到查找到第一个空格i,此时i-1即为单词的末尾,单词长度为i,然后将该单词逆序。下一个单词的位置为上一个空格位置加一即i+1,找到下一个空格的位置j,则该单词的末尾为j-1,单词长度为j-i-1然后再将该单词逆序。依次将所有单词逆序。
程序实现(C语言)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* reverseWords(char* s)
{
int start=0,end=0,j=0,i=0;
int strl=strlen(s) ;
char *result;
result = (char* )malloc(sizeof(char)*(strl+1));
printf("%d\n",strlen(s));
printf("%c\n",*(s+strlen(s)));
for (i=0;i<=strl;i++)
{
if (s[i]==32 || i==strl) //最后一个单词末尾为句子长度值-1
{
end=i-1;
for (j=start;j<=end;j++)
{
result[j]=s[end-j+start]; //单词逆序
printf("%c\n",result[j]);
}
result[i]=' '; //单词之间空格
start=i+1;
printf("%c\n",result[i]);
}
}
result[strl]='\0';
return result;
}
int main()
{
char *strs="Let's take LeetCode contest";
char *restrs;
char *result;
result=reverseWords(strs);
printf("%s",result);
return 0;
}
参考文献
[1] https://leetcode.com/problems/reverse-words-in-a-string-iii/#/description
[2] http://blog.csdn.net/yanqueen2011/article/details/70139408