题目:
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.
解释:
翻转一个字符串中的每个单词。
python代码:
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
s_list=s.split(' ')
result=[]
for word in s_list:
re_word=word[::-1]
result.append(re_word)
return " ".join(result)
c++代码:
class Solution {
public:
string reverseWords(string s) {
for(int i=0;i<s.length();i++)
{
if(s[i]!=' ')
{
int j=i;
for(;j<s.length() &&s[j]!=' ';j++) {}
reverse(s.begin()+i,s.begin()+j);
//因为运行完这段程序以后需要i++,所以不能直接i=j
i=j-1;
}
}
return s;
}
};
cpp中i在循环中是变化的,所以感觉用for循环不太合适,用while循环更合适一点。
c++第二种写法:
class Solution {
public:
string reverseWords(string s) {
int i=0;
while(i<s.size())
{
if(s[i]!=' ')
{
int j=i;
for(;j<s.length() &&s[j]!=' ';j++) {}
reverse(s.begin()+i,s.begin()+j);
i=j+1;
}
}
return s;
}
};
c++快速split():
class Solution {
public:
string reverseWords(string s) {
istringstream stream(s);
string result;
string tmp;
while(getline(stream,tmp,' '))
{ reverse(tmp.begin(),tmp.end());
result+=tmp+" ";
}
return result.substr(0,result.size()-1);
}
};
总结:
cpp直接是原地翻转,注意reverse()的输入也是左闭右开,不包括最后一个值。注意循环条件的判断,感觉还是python更方便。