查看原文
其他

【边学边敲边记】LeetCode012:反转字符串

老表的第一个一百万 简说Python 2019-05-25

一、写在前面

LeetCode 第二题两数之和传输门:LeetCode011 : 字符串相乘
今天给大家分享的是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的人不多,但我有想法,我骄傲啊~
没有,其实上面的一行、两行代码解决问题超级方便,也算小技能了。

五、疑惑

今天,想谈谈学习。


不知道大家有没有试过一个人学习,我试过,从大一到大二,学习上几乎一个人,当然我很喜欢帮人解决问题,比如大一大二实训的时候,几乎和班上一半的人我都或多或少的交流过,所以学习上,还算可以。


但学Python,我是我们班,甚至我们院第一第二个人了,python少有人学,大家都在啃javaweb,前端,小程序等等,一个人真的太难了,遇到问题想找个人讨论都没有,还好我遇到了李老师,对我帮助特别大,加入实验室有地方学习,指导我学习方向,监督我学习,同时刷leetcode也很幸运,我遇到了光城学长,在思想、学历都要比我高很多的学长,给我很多建议,同时刷题路上我们也一直在坚持,交流思想,这也是我到现在还没放弃的原因。


我想的是:有一天,我把leetcode刷200、300、400道题,思想、能力上有很大提升后,我想写一本书,刷题的、励志的、理论知识的,等我公众号有了几百篇原创,等我看完几十本书籍,等我考完研,我想,我可以。


加油大家,任何时候,不要放弃,除非你找到了一条更好的路,你得确保,那的确是条了不起的路。

六、结语

上面提到的光城学长,现在研一,个人公众号:光城,大家可以关注一波。
另外加我微信:zs820553471,备注:leetcode,加入专门的leetcode刷题交流群。
坚持 and 努力 : 终有所获。


END

往期精彩

LeetCode011:字符串相乘

从00-90后的微信昵称,发现如下规律。。。


从0爬妹子图片教程,难道我也下海了?

爬取《悲伤逆流成河》猫眼信息 | 郭敬明五年电影最动人之作

进学习交流群

不失联,扫码加X先生微信学习交流

温馨提示

欢迎大家转载,转发,留言,点赞支持X先生。

文末广告点一下也是对X先生莫大的支持。

做知识的传播者,随手转发。


更多精彩推荐,请关注我们

天冷了,早上起床麻利点

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存