题目

给定一个字符串,请从这个字符串中找出所有最长的没有重复字符的子串,并返回最长不重复子串的长度。

例如:

字符串: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--最长不重复子串相关推荐

  1. python课程编程题汇总(中)

    python编程题汇总 众所周知,由于疫情的原因,大家都在上网课,我也不例外啦~ 用这个贴子来记录也和大家分享一下我们课上的编程讨论题 上篇在这→python课程编程题汇总(上) 下篇在这→pytho ...

  2. python快速编程入门课后程序题答案-Python 入门编程题:1~10(答案)

    Python 入门编程题:1~10(答案) 提示:最好还是先思考,先编写,再看答案哦 ^_^ 1. for i in range(1, 5): for j in range(1,5): for k i ...

  3. python经典编程题分别取个位十位百位

    python经典编程题分别取个位十位百位 问题描述: 对于输入的两个两位数正整数a.b,将a的十位和个位依次放到c的十位和千位,将b的十位和个位依次放到c的百位和个位上. 输入:a,b两个整数 输出: ...

  4. zip()函数以及编程题:最长公共前缀(代码简单易懂)

    1.zip函数 zip()函数返回一个zip类型的对象,可以转换为list或dict #定义列表 a = [1, 2, 3] b = [4, 5, 6]# 打包为元组的列表,而且元素个数与最短的列表一 ...

  5. JavaScript初学者编程题(16)

    JavaScript初学者编程题(16) 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? HTMl部分 <!--t ...

  6. python期末编程题_Python 语言程序设计二级教程第七章编程题

    编程题1 f=open('file1.txt','w') f.write('My name is Lin') f.write('I am from China') f.close() k=open(' ...

  7. python入门编程题库-Python随笔30:Python基础编程练习题25~26

    注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. Python编程 Python基础练习题25:合并两个列 ...

  8. python递归编程题_Python数据结构与算法41:递归编程练习题4:铺瓷砖

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为8分钟. 递归编程练习题4:铺瓷砖 给定一个长度为N的区域,及4种不同长度的瓷砖:灰瓷砖(长为1格).红瓷 ...

  9. python二级编程题百度文库_Python自动化面试常见的编程题及答案

    前言 随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力.因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点. 基本编码能力及思维逻辑 基本数据结构(顺序表.链表.队列.栈.二叉树 ...

  10. python笔试编程题_Python自动化测试笔试面试时常见的编程题

    前言 随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力.因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点. 基本编码能力及思维逻辑 基本数据结构(顺序表.链表.队列.栈.二叉树 ...

最新文章

  1. Java 11正式发布,新特性解读
  2. 上拉电阻与下拉电阻的作用
  3. SDUT OJ 数据结构实验之排序一:一趟快排
  4. 处理错误:ORA-27101: shared memory realm does not exist 解决方案
  5. 为什么添加Web引用后,客户端就能远程调用WebService了?
  6. Linux下挂载ISO文件
  7. iOS:quartz2D绘图 (动画)
  8. 一段CyclicBarrier代码
  9. 如何让html重点表单自动对齐,html – 如何对齐多个表单元素?
  10. 阿帕奇跨域_阿帕奇光束
  11. 2021年软件开发的五大趋势,低代码/无代码得到了验证!
  12. java第三方包学习之jsoup
  13. python表白代码-520使用Python实现quot;我爱你”表白
  14. 使用spring最简单地读取properties文件中的内容
  15. WP7模拟器使用技巧
  16. 软考—软件设计师(软件工程基础知识)
  17. 互联网晚报 | 1月17日 星期一 | 飞猪推出买机票送核酸检测券服务;洋码头首个文旅场景免税店开业;2022年春运今日开启...
  18. krpano JS动态切换旋转角
  19. IOS8 keyboardWillShow 在UIKeyboardWillShowNotification 调用两次 问题解决
  20. oracle 字符集问题处理,oracle 字符集问题解决

热门文章

  1. 飘零网络验证-商业版3和金盾版1.5-研究中
  2. day15_雷神_前端03
  3. python爬取百度贴吧
  4. QuickFIX/N使用:如何自定义FIX(五)
  5. 微信小程序可横向滑动展开菜单
  6. openGauss数据库源码解析系列文章--openGauss简介(一)
  7. 1.第一章 Java基础语法 第一节(一)初识java
  8. java parcelable_Parcelable最强解析
  9. 【PS推荐】Photoshop CC2017安装教程及注意事项【如何修改安装路径】
  10. 肠道微生物群:心力衰竭的新治疗靶点