前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >无重复字符的最长子串

无重复字符的最长子串

作者头像
stormwen
发布于 2019-08-05 12:18:01
发布于 2019-08-05 12:18:01
6570
举报
文章被收录于专栏:公众号:googpy公众号:googpy

Python一个最大的特点是包含的函数很多,如果我们直接去死记硬背,效果肯定很差。所以,我们可以结合题目来学习函数,把每道题中的函数总结出来,这样学起来既不会枯燥乏味,效率也很高。

今天和大家分享的题目是,给定一个字符串,找出不含有重复字符的最长子串的长度。具体示例如下。

比如:“abcabcbb”找到的是“abc”,长度为3,而“bbbbb”找到的是“b”,长度为1,那么“abcabwbbd”的子字符串是什么?

小伙们想一想,这道题应该怎么解决呢?

我的思路是这样的:

1.首先通过定义函数的方法来解决;

2.将所有符合题目要求的字符串放在一个空的列表中;

3.定义两个参数,参数i的作用是在给定字符串个数的范围内遍历取值;

4.参数j的作用是,检测当前字符是否已经在字典中存在索引,如有检测到已经保存有索引并且索引值大于等于子串的起始位置,则表明移动j时,和i之间出现了重复字符,此时对比子串长度,并保留大的子串长度。

同时,将子串起始位置移动到当前字符上一次出现的位置之后。

根据上述思路,编写的代码如下:

s1 = "abcabwbbd"

def max_unique_str(s1=s1):

for i in range(len(s1)):

contain=[]

contain.append(s1[i])

for j in range(i+1,len(s1)):

if s1[j] in contain:

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])

下面介绍一下上面代码中出现的函数。

yield函数

带有yield的函数不再是一个普通函数,而是一个生成器generator,可用于迭代。

yield是一个类似return的关键字,迭代一次遇到yield时就返回yield后面(左边)的值。

重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。

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

——stormwen

在这里为了方便理解,我从网上找了一个例子。

def yield_test(n):

for i in range(n):

yield call(i)

print("i=",i)

#做一些其他的事情

print("do something.")

print("end.")

def call(i):

return i*2

#使用for循环

for i in yield_test(5):

print(i,",")

输出结果:

0 ,

i= 0

2 ,

i= 1

4 ,

i= 2

6 ,

i= 3

8 ,

i= 4

do something.

end.

join函数

用于将序列中的元素以指定的字符串连接生成一个新的字符串。

语法是:str.join(sequence),sequence——要连接的元素序列。

返回值:返回通过指定字符连接序列中元素后生成新的字符串。

str=“—”;

seq=(“a”,“b”,“c”);

print str.join(seq)

输出结果:a-b-c

今天的题目理解起来还是有一定难度的,每日实战训练就到这里,如果小伙伴们还有其他的好的解法,欢迎交流。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python 无重复字符的最长子串
输入: "abcabcbb" 输出: 3  解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2:
葫芦
2020/03/02
2.2K0
003. 无重复字符的最长子串 | Leetcode题解
题目要求连续, 我们考虑使用滑动窗口。而这道题就是窗口大小不固定的滑动窗口题目,然后让我们求满足条件的窗口大小的最大值,这是一种非常常见的滑动窗口题目。
苏南
2020/12/16
5340
003. 无重复字符的最长子串 | Leetcode题解
leetcode无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 3。 python class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ i = 0;j = 0;ans = 0 ma
Tim在路上
2020/08/05
3880
【leetcode刷题】20T3-无重复字符的最长子串
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
木又AI帮
2020/02/16
4990
Python 求解--无重复字符的最长子串
这是一个比较经典的算法题,给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。只需要返回最大长度即可
用户4945346
2024/04/18
6620
Python 求解--无重复字符的最长子串
python 无重复字符的最长子串 多种解法
编程小白狼
2024/12/31
1320
LeetCode 3. 无重复字符的最长子串
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
freesan44
2021/10/04
2370
LeetCode 3. 无重复字符的最长子串
【LeetCode02】找出不含重复字符的 最长子串 的长度
这道题,一开始最直接的想法就是暴力法,直接穷举所有的子串,然后选择无重复的子串中最长的那个。
Sam Gor
2019/07/08
1.6K1
【leetcode刷题】T58-无重复字符的最长子串
但是,很多子串是不用判断的,比如说,s="abcacbd",那么子串“abcac”、"abcacb"等不用判断,因为“abca”已经存在重复元素。
木又AI帮
2019/07/17
3600
Leetcode 3:无重复字符的最长子串
给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。
风骨散人Chiam
2020/10/28
2590
python学习笔记11-python内置函数
Help on built-in function abs in module __builtin__:
py3study
2020/01/09
5590
Python字符串总结大全
注意切片的开始总是被包括在结果中,而结束不被包括(半开半闭)。这使得 s[:i] + s[i:] 总是等于s
全栈程序员站长
2022/06/28
4610
Python字符串总结大全
《画解算法》3. 无重复字符的最长子串【python3丨简单】
输入: s = "abcabcbb" 输出: 3  解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2:
不吃西红柿
2022/09/19
5240
《画解算法》3. 无重复字符的最长子串【python3丨简单】
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke
大忽悠爱学习
2021/03/27
5900
【力扣算法08】之 5. 最长回文子串 python
我们可以使用动态规划来解决这个问题。首先,定义一个二维数组 dp,其中 dp[i][j] 表示从索引 i 到索引 j 的子串是否是回文串。如果子串是回文串,则 dp[i][j] 的值为 True,否则为 False。
全栈若城
2024/02/29
4080
【力扣算法08】之 5. 最长回文子串 python
Python 版 LeetCode 刷题笔记 #5 无重复字符的最长子串(上)
从下午三点半到晚上十二点,一直卡在这个题,郁闷。经过好几番尝试后,用暴力法完成并提交了一版代码,测试结果超出时间限制。根据反馈的测试用例,专门针对特例做了下处理,才勉强通过测试。
TTTEED
2020/07/08
4530
无重复字符的最长子串
JavaScript实现LeetCode第3题:无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答
木子星兮
2020/07/16
8170
面试题-python3 找出一个字符串中子串,不含有重复字符的最长子串
示例1: 输入:” abcabcbb” 输出: 3 解释:因为无重复字符的最长子串是”abc”, 所以其长度为3。 示例2: 输入: “bbbbb”” 输出: 1 解释:因为无重复字符的最长子串是”b”, 所以其长度为1。 示例3: 输入: “ pwwkew” 输出: 3 解释:因为无重复字符的最长子串是”wke”‘, 所以其长度为3。 请注意,你的答案必须是子串的长度,”pwke”是一个子序列,不是子串。
上海-悠悠
2021/04/09
9410
400多人刷过的一道Python题目
最近写的文章会偏向于Python实战一些,大家不要看着刷题,心里就有抵触了,其实刷题一直是学习的一个必要途径。你想想高中时候,如果你光听听课,学学理论就行的话,那不是每个人都成状元啦。
stormwen
2019/08/05
6550
LeetCode 3: 无重复字符的最长子串
Given a string, find the length of the longest substring without repeating characters.
爱写bug
2019/12/02
5010
推荐阅读
相关推荐
python 无重复字符的最长子串
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文