c語言字串反轉_leetCode 151. 翻轉字串裡的單詞
阿新 • • 發佈:2021-01-24
技術標籤:c語言字串反轉
給定一個字串,逐個翻轉字串中的每個單詞。
示例:
輸入:"the sky is blue"
輸出:"blue is sky the"
說明:
- 無空格字元構成一個單詞。
- 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
- 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
進階: 請選用C語言的使用者嘗試使用 O(1) 空間複雜度的原地解法。
/*解法1:C++ 利用stack*/ class Solution { public: void reverseWords(string &s) { stack<string> des; if(s.empty()) return; int len = s.size(); for(int i=0; i<len; ++i) { if(s[i] == ' ') continue; string word; while(i<len && s[i]!=' ') { word += s[i]; i++; } des.push(word); } if(des.empty()) s = ""; else { s.clear(); int j; int stacksize = des.size(); for(j=0; j<stacksize-1; ++j) { s += des.top(); des.pop(); s += ' '; } s += des.top(); } } };
/*解法2:C 先翻轉每個單詞 再翻轉整個字串*/ void reverseWords(char *s) { int len = strlen(s); if(s==NULL || len==0) return; int begin = 0; //整個字串當前處理位置 int cur = begin; //單個單詞的起始 int end = begin; //單個單詞的結束 //先翻轉單個單詞 while(true) { int length = 0; //單個單詞長度 while(s[cur] == ' ') { cur++; end++; } while(s[end]!=' ' && s[end]!='0') { end++; length++; } if(s[end] == ' ') //單個單詞結束 { reverse(s, cur, end); if(begin != 0) s[begin] = ' '; for(int i=0; i<length; ++i) { s[begin++] = s[cur++]; } } else if(s[end] == '0') { s[begin] = '0'; break; } } //再翻轉整個句子 reverse(s, 0, begin); } void reverse(char *s, int begin, int end) { int sbeg = begin; int send = end - 1; while(begin < end) { s[sbeg++] = s[send--]; } }
#Python:一行程式碼即可完成..........就是這麼任性~
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
return ' '.join(sub[::-1] for sub in s[::-1].split())