题目
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思考
- 解法一: 字符串操作
通过切分和逆序可以得到结果。 - 解法二: 手动翻转
转自剑指Offer(四十四):翻转单词顺序序列 | Jack Cui
观察字符串变化规律,你会发现这道题很简单。只需要对每个单词做翻转,然后再整体做翻转就得到了正确的结果。
需要注意字符串不可变,列表可变。
代码
- 解法一
class Solution:
def ReverseSentence(self, s):
# write code here
elemList = s.split(" ")
return ' '.join(elemList[::-1])
- 解法二
#-*-coding:utf-8-*-
class Solution:
def ReverseSentence(self, s):
# write code here
s_list = list(s)
s_list.append(' ')
flag = 0
for i in range(len(s_list)):
if s_list[i] == ' ':
self.swap(s_list, flag, i - 1)
flag = i + 1
# print(s_list)
s_list = s_list[:-1]
return self.swap(s_list, 0, len(s_list) - 1)
def swap(self, s_list, start, end):
while start < end:
s_list[start], s_list[end] = s_list[end], s_list[start]
start += 1
end -= 1
return ''.join(s_list)
if __name__ == "__main__":
solution = Solution()
print(solution.ReverseSentence('I am a student'))