记录刷题的过程。牛客和力扣中都有相关题目,这里以牛客的题目描述为主。该系列默认采用python语言。
1、问题描述:
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student.
a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
2、数据结构:
数组
3、题解:
方法1:双指针
可以看出翻转顺序后 空格之间的单词的顺序并没有改变。
从后往前遍历,
i遇到空格停止,
处理两个空格之间的单词:增加s[i+1:j+1]到res中,
然后i跳过空格
把i赋值给j.(表示下一个单词的最右边)
python代码如下:
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
s = s.strip()#删除首尾空格
i = j = len(s) - 1
res = []
while i >= 0:
while i >= 0 and s[i] != ' ': #搜索首个空格
i -= 1
res.append(s[i+1:j+1])#添加单词
while i >=0 and s[i] == ' ':#跳过中间的空格
i -= 1
j = i
return " ".join(res)
方法2:分割 + 倒序
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
# write code here
return " ".join(s.strip().split()[::-1])
4、复杂度分析:
方法1:
时间复杂度都为O(N)
空间复杂度都为O(N)
方法2:
时间复杂度:O(N)
空间复杂度:O(N)