題目
給定一個字符串,你需要反轉(zhuǎn)字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。
示例
輸入: "Let's take LeetCode contest"
輸出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每個單詞由單個空格分隔,并且字符串中不會有任何額外的空格。
題目分析
首先來看如何反轉(zhuǎn)一個字符串:使用雙指針法,前指針指向第一個元素,后指針指向最后一個元素,然后交換這兩個指針的元素,循環(huán)。
while (left < right){
swap(s[left], s[right]);
left++;
right--;
}
這道題目只是在這個基礎(chǔ)上增加了一點判斷條件,同樣用雙指針法,每當(dāng)遍歷到空格或\0的時候,說明一個單詞結(jié)束了,反轉(zhuǎn)這個單詞(使用上文的方法)。
但要注意,由于需要借助最后一位的\0,所以要多遍歷一位。
for (int i = 0; i < len + 1; i++){
if (s[i] == ' ' || s[i] == '\0'){
right = i - 1;
while (left < right){
swap(s[left], s[right]);
left++;
right--;
}
left = i + 1;
}
}
題目解答
char * reverseWords(char * s){
int len = strlen(s);
int left = 0;
int right;
for (int i = 0; i < len + 1; i++){
if (s[i] == ' ' || s[i] == '\0'){
right = i - 1;
while (left < right){
char temp = s[right];
s[right] = s[left];
s[left] = temp;
left++;
right--;
}
left = i + 1;
}
}
return s;
}