您的位置:首页 > 职场人生

reverse words in a sentence

2015-10-11 21:11 246 查看


题目要求反转句子中每个单词的顺序,单词简单的以空格分隔

input
How are you?

output
you? are How

想到的测试用例
1. 首位有空格,目前结果中,首位也会有空格
2. 连续空格的情况,目前结果也会有连续空格
3. 单词只有一个字母
4. 输入为空串

解题思路
两次反转,第一次反转整句话,第二次反转每个单词

代码
void reverse_word(char a[]) {
if (a == NULL) return; // 这个必须写,否则strlen遇到空指针会crash
int n = strlen(a);
if (n == 0) return; //这个可以不写,因为为0时,后面的循环都不会进入,但是写上更安全清晰,不容易出错

for (int i = 0, j = n-1; i<j; i++, j--) {
char temp=a[i]; a[i]=a[j]; a[j]=temp;
}

int start = 0, end = 0;
while (end < n) {         // 这里必须使用位置判断,而非检查a[end],因为内循环定位后
//  出大循环前,end又加了1,移动到字符串后面去了
//  这里,不知道有没有更方便记忆的,直白的写法
while (a[end] && a[end] != ' ') end++;  // 一定要双重判断,否则会越界。可以使用end<n代替,感觉更直观
for (int i=start, j=end-1; i<j; i++, j--) {
char temp=a[i]; a[i]=a[j]; a[j]=temp;
}
start = ++end;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 面试 leetcode