剑指offer 翻转单词顺序列
问题描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
C++代码实现
思路:将每个单词拆出来,再拼接
class Solution {
public:
string ReverseSentence(string str) {
if (str.size() == 0)
{
return str;
}
int i = 0, j = 0;
while(i < str.size() && str[i] == ' ')
{
i++;
}
if (i == str.size())
{
return str;
}
string temp = "";
vector<string> s;
i = 0;
while(j < str.size())
{
while(str[j] != ' ' && j < str.size())
{
j++;
}
temp = str.substr(i, j-i);
s.push_back(temp);
j++;
i = j;
}
temp = "";
for (i = s.size()-1; i >= 0; i--)
{
temp += s[i];
if (i != 0)
{
temp += ' ';
}
}
return temp;
}
};
python2代码实现
使用split
按空格切分,然后reversed
逆转,join
拼接
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
if len(s) == 0:
return s
if s.count(' ') == len(s):
return s
l = s.split(' ')
l = list(reversed(l))
return ' '.join(l)