學渣帶你刷Leetcode151. 翻轉字符串裏的單詞

題目描述

給定一個字符串,逐個翻轉字符串中的每個單詞。

 

示例 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章