专栏首页公众号:googpy400多人刷过的一道Python题目

400多人刷过的一道Python题目

最近写的文章会偏向于Python实战一些,大家不要看着刷题,心里就有抵触了,其实刷题一直是学习的一个必要途径。你想想高中时候,如果你光听听课,学学理论就行的话,那不是每个人都成状元啦。

我每天分享的Python题目,都是花时间从leetcode上找的,自己先做一遍,把思路理清了才敢分享出来,每道题都是掰开揉碎细讲的,不仅适合入门的同学,对于一些应聘找工作的小伙伴也有参考价值。

一起来看一下今天的题目吧!

给定一个字符串,寻找没有字符串重复的最长子字符串。

示例:

给定“abcabcbb”,没有重复字符的最长子串是“abc”,那么长度是3

给定“bbbbb”,最长的子串就是“b”,长度是1

给定“pwwkew”,最长子串是“wke”,长度是3。请注意答案必须是一个子串,“pwke”是子序列,而不是子串。

下面是我写的代码

#!/usr/bin/env python
# encoding: utf-8
'''
@author: stormwen
'''
s1 = 'abcabwbbd'

def max_unique_str(s1=s1):
    for i in range(len(s1)):   #遍历字符所在下标,范围是0~len(s1)-1
        contain =[]            #定义一个列表,储存不重复的字符
        contain.append(s1[i])  #append方法在列表的末尾添加新的对象
        for j in range(i+1,len(s1)):   #在i+1~len(s1)-1范围遍历
            if s1[j] in contain:       #如果第i+1个元素在列表contain中,那么就停止,yield类似return
                yield contain
                break
            else:
                contain.append(s1[j])

print(sorted([''.join(x) for x in max_unique_str(s1)],
             key=lambda x:len(x),reverse=True)[0])         #sorted函数;join函数;列表推导式;

每段代码我都有注释,帮助大家理解。下面主要是讲一下代码中涉及到的知识点。

代码解析:

(1)range函数,在Python3中返回的是一个可迭代对象,而不是列表类型,所以打印的时候不会打印列表。

函数语法:range(stop);range(start,stop[,step])。

参数说明:

Start:计数从start开始。默认是从0开始。例如

range(5)

range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]

stop:计数到stop结束,但不包括stop。例如

range(0,5)

range(0,5) #代表从0到5(不包含5)
[0,1, 2, 3, 4]

(2)append函数,用于在列表末尾添加新的对象

函数语法:list。append(obj),obj是添加到列表末尾的对象

需要注意的是,该方法无返回值,但是会修改原来的列表

(3)python中的yield。我的理解是这样的,yield是一个类似return的关键字,迭代一次遇到yield时就返回yield后面(右边)的值,下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。

简要理解,yield就是return返回一个值,并且记住这个返回的位置,下一次迭代就从这个位置后(下一行)开始

(4)sorted函数,对所有可迭代的对象进行排序操作。

函数语法:sorted(iterable,key=None,reverse=False)

参数说明:

iterable:可迭代对象

key:主要是用来进行比较的元素,只有一个元素,具体的函数参数就是取自于可迭代对象中,指定可迭代中的一个元素来进行排序

reverse:排序规则,reverse=True降序,reverse=False升序(默认)

example_list = [5, 0, 6, 1, 2, 7, 3, 4]
result_list = sorted(example_list, key=lambda x: x*-1)
print(result_list)
[7, 6, 5, 4, 3, 2, 1, 0]

(5)join函数,用于将序列中的元素以指定的字符连接生成一个新的字符串

函数语法:str.join(sequence)

参数说明:sequence:要连接的元素序列。

该函数返回的是通过指定字符连接序列中元素后生成的新字符串。

s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))


r-u-n-o-o-b
runoob

(6)len函数,用于返回对象(字符、列表、元组等)长度或项目个数。

函数语法:len(s),s:对象

str = "runoob"
print(len(str))          # 字符串长度

l = [1,2,3,4,5]
print(len(l))               # 列表元素个数


6
5

写到这里,我才算把题目中涉及的知识点说清楚了,所以,对于新手来说,不管是刷题还是看学习视频,切莫贪多,老老实实地把每道题弄懂才是最重要的。

很多学习Python的人都抱怨说Python虽然功能强大,但是内置函数太多,我记不住,但是,你要是像我这样每次写代码时,把用到的函数都总结一遍,时间久了,我相信肯定对大多数函数也会熟能生巧的。

本文分享自微信公众号 - googpy(googpy),作者:叫我小包总

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Python制作好玩的小游戏

    炎炎夏日,独坐家中,闲来无事,便用Python写了2个简单的解闷小游戏,分享给你们,也希望大家通过这两个小游戏可以学习Python的编程知识。

    stormwen
  • Python函数式编程

    要讲函数式编程,只要有点编程基础的同学应该可以想到命令式编程。我们平时写代码时,用命令式编程最多,不管业务代码有多复杂,都离不开以下几个步骤:

    stormwen
  • 用Python制作恋爱日志

    最近一直在学习Python,就想到编写一个程序每天早上自动给女朋友发送微信,内容是我俩相恋时间,每日一句以及一句早安。

    stormwen
  • 云函数公测!小程序开发节省 60% 的成本

    知晓君
  • 甘特图绘制(Excel绘制图表系列课程)!

    谈到甘特图,很多人最先想到的是项目经理,想到项目经理,最先想到的就是 嗯!这两个字就是形容包括我在内的所有项目管理人员的! 回归正轨,是这样的,项目经理呢,...

    用户1332619
  • 滴滴、摩拜和ofo纷纷加码,为何共享电单车市场却起不来?

    10月29日,据新京报报道,ofo小黄车的国内的运营主体东峡大通(北京)已经完成了电单车的专利申请,该专利名称为“电单车的车速控制方法、系统及电单车”,主要解决...

    罗超频道
  • Castbox——首个“+区块链”音频内容应用,颠覆传统数字内容平台

    在众多海内外区块链项目中,鲜有已经落地并拥有大量用户的项目,Castbox可谓其中的佼佼者。Castbox支持超过70种语言,拥有超过5000万份音频内容和来自...

    区块链领域
  • 王小川 GIF2017 发布搜狗海外搜索,下一个百年翻译运动或再起

    【新智元导读】2017年1月14日极客公园创新大会(GIF2017)现场,王小川讲述人工智能如何成功落地,变成具有商业价值,以及全人类共享价值的产品,探讨人工智...

    新智元
  • 微信公众平台数据接口正式对所有认证公众号开放

      经过10多天的微信公众平台数据接口内测,现在正式对所有认证公众号开放了。微信公众平台数据接口正式向所有已微信认证(通过资质认证即可)的服务号和订阅号开放。通...

    ytkah
  • ES6解构嵌套对象

    让我们先回忆一下ES6的对象解构,本文介绍各种ES6的对象解构用法,你用过哪一种?

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动