题目
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest" 输出:"s'teL ekat edoCteeL tsetnoc"
解题
方法三:c++常规做法(重要)
class Solution { public: string reverseWords(string s) { string res; int i=0; while(i<s.size()){ int start=i; while(i<s.size()&&s[i]!=' ') i++; // string tmp=s.substr(start,i-start); // reverse(tmp.begin(),tmp.end()); // res+=tmp; for(int p=start;p<i;p++){//从i反向遍历到start res+=s[start+i-1-p]; } while(i<s.size()&&s[i]==' ') { i++; res+=' '; } } return res; } };
方法一:常规思路
先把字符串变成列表,对列表内每个字符串都反转。
生成的字符串序列,加入到" "中,转回字符串
注意:字符串在python中是不可变类型,不能直接对自身反转。只能对它反转的结果给另一个变量。
class Solution(object): def reverseWords(self, s): return " ".join(word[::-1] for word in s.split(" "))
或者换种写法
class Solution: def reverseWords(self, s: str) -> str: return " ".join(map(lambda x:x[::-1],s.split(" ")))
方法二:两次反转
单词位置循序反转一次,再对字符串反转(相当于对单词位置循序反转一次+对单词自身顺序反转)。
两次 单词位置循序反转 抵消 ,相当于只做了一次 单词自身顺序反转。
代码
class Solution(object): def reverseWords(self, s): return " ".join(s.split(" ")[::-1])[::-1]
同理,也可以先字符串,反转,再对单次位置反转。
代码
class Solution(object): def reverseWords(self, s): return " ".join(s[::-1].split(" ")[::-1])