題目描述
給定一個字符串,逐個翻轉字符串中的每個單詞。
示例 1:
輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:
輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
示例 3:
輸入: "a good example"
輸出: "example good a"
解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
說明:
無空格字符構成一個單詞。
輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
進階:
請選用 C 語言的用戶嘗試使用 O(1) 額外空間複雜度的原地解法。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
白話題目:
算法:
詳細解釋關注 B站 【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB
C語言完全代碼
char * reverseWords(char * s) {
int len = strlen(s);
char *res = (char *)malloc(sizeof(char)*(len + 10)); //返回字符串
memset(res, 0, sizeof(char)*(len + 10));
int res_len = 0;
int flag=0;
for (int i = len - 1; i >= 0; i--) {
int right=0, left=0; //確定一個單詞的首尾index
if (s[i] != ' ') {
flag=1;
right = i;
for (int j = i; j > 0; j--) {
if (s[j - 1] == ' ') {
left = j;
break;
}
}
if(left<=right){
for (int t = left; t <= right; t++) {
res[res_len++] = s[t];
}
}
res[res_len++] = ' ';
i = left;
}
}
//要注意如果s爲空字符串,那麼要返回“”,用flag來標記s是否爲空字符串
if(flag==0)
return "";
res[res_len-1] = '\0';
//在for循環中在每次輸入完一個單詞後還要添加一個空格,這裏的作用是取消最後一個
//單詞後面的空格
return res;
}