Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc"
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
class Solution(object): def reverseWords(self, s): """ :type s: str :rtype: str """ # split world, for echo one reverse it and join it. """ ans = "" flag = True for word in s.split(" "): if flag: ans += word[::-1] flag = False else: ans += " "+word[::-1] return ans """ #return " ".join(w[::-1] for w in s.split(" ")) ans = "" for word in s.split(" "): ans += word[::-1] + " " return ans.strip()
个人倾向于一行代码搞定。
解法2: 耗时较" ".join(w[::-1] for w in s.split(" ")) 少
# Here I first reverse the order of the words and then reverse the entire string. def reverseWords(self, s): return ' '.join(s.split()[::-1])[::-1]
写一个c++的,贪心:
class Solution { public: void reverseWord(string &s, int i, int j) { char c; while(i < j) { c = s[j]; s[j--] = s[i]; s[i++] = c; } } string reverseWords(string s) { int len= s.length(); for(int i=0; i<len; ) { int j = i; while (j<len && s[j] != ' ') j+=1; reverseWord(s, i, j-1); i = j+1; } return s; } };
class Solution { public: string reverseWords(string s) { size_t front = 0; for(int i = 0; i <= s.length(); ++i){ if(i == s.length() || s[i] == ' '){ reverse(&s[front], &s[i]); front = i + 1; } } return s; } };