题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
一:按空格切分为数组,翻转数组,再用空格连接【我觉得这个思路最直观也最容易实现,推荐~】
二:按空格切分为数组,依次入栈,再出栈(用空格连接)
三:两次翻转,先将字符串全部原地翻转。使用双指针,分别对应前后两个空格的位置,翻转两指针之间的子字符串,即单词。【这是剑指offer上的标准思路】
方法一:
class Solution:
def ReverseSentence(self, s):
# write code here
if not s:
return s
return ' '.join(s.split(' ')[::-1]) ## a[::-1]实现数组中数字倒序输出
方法二:
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
if s is None or len(s) == 0:
return s
stack = []
for i in s.split(' '):
stack.append(i)
ans = ""
while len(stack) > 0:
ans += stack.pop() + " "
ans = ans[:-1]
return ans
方法三:
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
if not s:
return s
ls = list(s)
rs = self.Reverse(ls)
first = 0
res = []
for i in range(len(rs)):
if rs[i] == ' ':
res.append(''.join(self.Reverse(rs[first:i]))) #每个单词要先连接起来
first = i + 1
res.append(''.join(self.Reverse(rs[first:])))
return ' '.join(res) # 最后单词与单词之间也要连接起来,并且用空格' '连接
def Reverse(self,s):
start = 0
end = len(s)-1
while start < end:
tmp = s[start]
s[start] = s[end]
s[end] = tmp
start += 1
end -= 1
return s