题目
leetcode
英文
Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
中文
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例
输入:“Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”
函数
char * reverseWords(char * s){
}
分析
活学活用,融会贯通!!!连着做字符串相关的题目,刚做了一道循环移位的题目,里面用到了字符串反转的思想,和这个题目非常类似。只是这里需要判断空格,然后以空格作为分隔符进行反转。
还有,循环结束后还需要反转一次,因为最后一个单词遇到 ‘\0’ 就结束了,未反转,导致第一次运行没有通过。
这算是第一次自己完整做出来的一道题目吧。
实现
void reverse(char *s, int a, int b){
for (; a < b; a++, b--){
int temp = s[a];
s[a] = s[b];
s[b] = temp;
}
}
char * reverseWords(char * s){
int i = 0, count = 0; // count 记录需要反转片段的起始位置, i 记录结束位置
while (s[i] != '\0'){
if (s[i] != ' '){
i++;
}else{
reverse(s, count, i - 1);
i++;
count = i;
}
}
reverse(s, count, i - 1);
return s;
}