这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战
一、写在前面
LeetCode 第一题两数之和传输门:听说你还在写双层for循环解两数之和?
LeetCode 第二题两数之和传输门:两个排序数组的中位数,“最”有技术含量的解法!
LeetCode 第三题最长回文子串传输门:马拉车算法解最长回文子串!Manacher
LeetCode 第四题字符串转整数 (atoi):“愚公移山”的方法解atoi,自以为巧妙!
LeetCode 第五题最长公共前缀:继续解Leetcode,最长公共前缀
LeetCode 第六题三数之和:Leetcode“最经典”算法题之一:三数之和
LeetCode 第七题最接近的三数之和:最接近的三数之和,妙
LeetCode 第八题有效的括号:Leetcode有意思的一题:有效的括号
LeetCode 第九题删除排序数组中的重复项:LeetCode之删除排序数组中的重复项
LeetCode 第十题盛最多水的容器:盛最多水的容器,超有意思有技巧的Leetcode题
LeetCode 第十一题字符串相乘传输门:Leetcode字符串相乘,你会怎么做?
今天给大家分享的是LeetCode 数组与字符串 第十二题:反转字符串,为面试而生,期待你的加入。 “Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .”
二、今日题目
编写一个函数,其作用是将输入的字符串反转过来。
输入: "hello"
输出: "olleh"
输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"
三、 分析
这个题目,看到第一眼,太简单了,应该是刷到目前为止最简单的一题,完全对字符串的一个遍历,重排。
正确思想的思路分析:
四、解题
- 捷径的方法:
一行代码
class Solution(object):
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
return s[::-1]
切片操作,前一篇Python小知识 | 这些技能你不会?(一)有较详细介绍切片操作。
两行代码
(1)reduce函数
class Solution(object):
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
from functools import reduce
return reduce(lambda x,y:y+x,s)
函数介绍:reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
(2)reversed函数
class Solution(object):
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
s = list(s)
return "".join(reversed(s))
函数介绍:reversed 函数返回一个反转的迭代器。 对一个可迭代对象就行反转,比如列表、集合等,返回值也为一个迭代对象,这里先把字符串转换成列表,然后调用reversed函数,最后用join函数把列表迭代连接。
- 正常思想 遍历,替换值,思路已经在分析里给出
时间复杂度:O(n^2)
class Solution(object):
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
result = list(s)
for i in range(len(result)//2):
temp = result[len(result)-i-1]
result[len(result)-i-1] = result[i]
result[i] = temp
return ''.join(result)
- 提交结果
测试数据:476组
运行时间:48ms
击败人百分比:18.15%
虽然beat的人不多,但我有想法,我骄傲啊~
没有,其实上面的一行、两行代码解决问题超级方便,也算小技能了。
五、疑惑
(18年还在读书时写的,共勉)今天,想谈谈学习,不知道大家有没有试过一个人学习,我试过,从大一到大二,几乎一个人,当然我很喜欢帮人解决问题,比如大一大二实训的时候,几乎和班上一半的人我都或多或少的交流过,所以学习上,还算可以,但学Python,我是我们班,甚至我们院也是第一第二人了,少有人学,大家都在啃javaweb,前端,小程序等等。
一个人真的太难了,遇到问题想找个人讨论都没有,还好我遇到了李老师,对我帮助特别大,加入实验室有地方学习,指导我学习方向,监督我学习,同时刷leetcode也很幸运,我遇到了光城学长,在思想、学历都要比我高很多的学长,给我很多建议,同时刷题路上我们也一直在坚持,交流思想,这也是我到现在还没放弃的原因,我想的是:有一天,我把leetcode刷200、300、400道题,思想、能力上有很大提升后,我想写一本书,刷题的、励志的、理论知识的,等我公众号有了几百篇原创,等我看完几十本书籍,等我考完研,我想,我可以,加油大家,任何时候,不要放弃,除非你找到了一条更好的路,你得确保,那的确是条了不起的路。
六、结语
坚持 and 努力 : 终有所获。
点赞 在看 留言 转发 ,四连支持,原创不易。好的,那么下期见,我是爱猫爱技术,更爱思思的老表⁽⁽ଘ( ˙꒳˙ )ଓ⁾⁾