最长不重复子串python,Python编程题16--最长不重复子串
题目
给定一个字符串,请从这个字符串中找出所有最长的没有重复字符的子串,并返回最长不重复子串的长度。
例如:
字符串:mabcafrab ==> 最长不重复子串:bcafr,长度5
字符串:pwswekedw ==> 最长不重复子串:swek, kedw,长度4
实现思路
设置一个字典 temp_dict ,用于存储每个字符在字符串中的最新位置
设置一个列表 str_list ,用于存储不同的子串
设置两个变量 start、max_length,分别表示 计算子串长度时的起始索引下标 和 最大子串长度
遍历字符串,如果当前字符已在字典中,那么直接更新 start 的值,比较 temp_dict[cur] + 1(该字符所在位置 + 1)、start ,取其中的最大值
计算子串时,从 start 到 i 的子串长度为 i - start + 1 ,如果该长度大于 max_length ,那么就更新 max_length 为 i - start + 1 ,同时将这里的子串存储到列表 str_list 中
遍历的时候,每次都要把当前字符及其最新位置存储到 temp_dict 中
从列表 str_list 中,找出元素长度为 max_length 的所有子串
最后返回最长不重复的所有子串及其长度
代码实现
def get_longest_string(s):
temp_dict = {}
str_list = []
start, max_length = 0, 0
for i in range(len(s)):
cur = s[i]
if cur in temp_dict:
start = max(temp_dict[cur] + 1, start)
if i - start + 1 >= max_length:
max_length = i - start + 1
str_list.append(s[start:i+1])
temp_dict[cur] = i
res_str = ", ".join([i for i in str_list if len(i) == max_length])
return res_str, max_length
s1 = "mabcafrab"
res = get_longest_string(s1)
# 最长不重复子串为:bcafr ,其长度为:5
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s1, res[0], res[1]))
s2 = "pwswekedw"
res = get_longest_string(s2)
# 最长不重复子串为:swek, kedw ,其长度为:4
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s2, res[0], res[1]))
s3 = "abcabb"
res = get_longest_string(s3)
# 最长不重复子串为:abc, bca, cab ,其长度为:3
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s3, res[0], res[1]))
s4 = "pwwkew"
res = get_longest_string(s4)
# 最长不重复子串为:wke, kew ,其长度为:3
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s4, res[0], res[1]))
s5 = "p"
res = get_longest_string(s5)
# 最长不重复子串为:p ,其长度为:1
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s5, res[0], res[1]))
最长不重复子串python,Python编程题16--最长不重复子串相关推荐
- python课程编程题汇总(中)
python编程题汇总 众所周知,由于疫情的原因,大家都在上网课,我也不例外啦~ 用这个贴子来记录也和大家分享一下我们课上的编程讨论题 上篇在这→python课程编程题汇总(上) 下篇在这→pytho ...
- python快速编程入门课后程序题答案-Python 入门编程题:1~10(答案)
Python 入门编程题:1~10(答案) 提示:最好还是先思考,先编写,再看答案哦 ^_^ 1. for i in range(1, 5): for j in range(1,5): for k i ...
- python经典编程题分别取个位十位百位
python经典编程题分别取个位十位百位 问题描述: 对于输入的两个两位数正整数a.b,将a的十位和个位依次放到c的十位和千位,将b的十位和个位依次放到c的百位和个位上. 输入:a,b两个整数 输出: ...
- zip()函数以及编程题:最长公共前缀(代码简单易懂)
1.zip函数 zip()函数返回一个zip类型的对象,可以转换为list或dict #定义列表 a = [1, 2, 3] b = [4, 5, 6]# 打包为元组的列表,而且元素个数与最短的列表一 ...
- JavaScript初学者编程题(16)
JavaScript初学者编程题(16) 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? HTMl部分 <!--t ...
- python期末编程题_Python 语言程序设计二级教程第七章编程题
编程题1 f=open('file1.txt','w') f.write('My name is Lin') f.write('I am from China') f.close() k=open(' ...
- python入门编程题库-Python随笔30:Python基础编程练习题25~26
注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. Python编程 Python基础练习题25:合并两个列 ...
- python递归编程题_Python数据结构与算法41:递归编程练习题4:铺瓷砖
注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为8分钟. 递归编程练习题4:铺瓷砖 给定一个长度为N的区域,及4种不同长度的瓷砖:灰瓷砖(长为1格).红瓷 ...
- python二级编程题百度文库_Python自动化面试常见的编程题及答案
前言 随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力.因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点. 基本编码能力及思维逻辑 基本数据结构(顺序表.链表.队列.栈.二叉树 ...
- python笔试编程题_Python自动化测试笔试面试时常见的编程题
前言 随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力.因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点. 基本编码能力及思维逻辑 基本数据结构(顺序表.链表.队列.栈.二叉树 ...
最新文章
- Java 11正式发布,新特性解读
- 上拉电阻与下拉电阻的作用
- SDUT OJ 数据结构实验之排序一:一趟快排
- 处理错误:ORA-27101: shared memory realm does not exist 解决方案
- 为什么添加Web引用后,客户端就能远程调用WebService了?
- Linux下挂载ISO文件
- iOS:quartz2D绘图 (动画)
- 一段CyclicBarrier代码
- 如何让html重点表单自动对齐,html – 如何对齐多个表单元素?
- 阿帕奇跨域_阿帕奇光束
- 2021年软件开发的五大趋势,低代码/无代码得到了验证!
- java第三方包学习之jsoup
- python表白代码-520使用Python实现quot;我爱你”表白
- 使用spring最简单地读取properties文件中的内容
- WP7模拟器使用技巧
- 软考—软件设计师(软件工程基础知识)
- 互联网晚报 | 1月17日 星期一 | 飞猪推出买机票送核酸检测券服务;洋码头首个文旅场景免税店开业;2022年春运今日开启...
- krpano JS动态切换旋转角
- IOS8 keyboardWillShow 在UIKeyboardWillShowNotification 调用两次 问题解决
- oracle 字符集问题处理,oracle 字符集问题解决