前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >400多人刷过的一道Python题目

400多人刷过的一道Python题目

作者头像
stormwen
发布2019-08-05 10:34:55
6350
发布2019-08-05 10:34:55
举报
文章被收录于专栏:公众号:googpy

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

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

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

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

示例:

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

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

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

下面是我写的代码

代码语言:javascript
复制
#!/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)

代码语言:javascript
复制
range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]

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

range(0,5)

代码语言:javascript
复制
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升序(默认)

代码语言:javascript
复制
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:要连接的元素序列。

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

代码语言:javascript
复制

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:对象

代码语言:javascript
复制
str = "runoob"
print(len(str))          # 字符串长度

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


6
5

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档