题目:

  给定一个字符串str,返回str中最长无重复字符子串的长度。

举例:

  str = “abcd”,返回4。 
  str = “aabcb”,返回3。

基本思路:

  如果str的长度为N,字符的编码范围为M,本题可以做到时间复杂度为O(N),空间复杂度O(M)。具体方法如下:

在遍历str之前,先申请几个变量。哈希表map,key表示某个字符,value为这个字符最近出现的位置。整型变量pre,如果当前遍历到的字符为str[i],pre表示必须以str[i-1]结尾的情况下,最长无重复字符子串开始位置的前一个位置,初始时pre = -1。全局变量length保存出现的最长长度。从左到右依次遍历str,遍历到str[i]时,计算必须以str[i]结尾的最长无重复字符子串的长度。

map[str[i]]表示之前出现str[i]字符的位置,假设该位置是a。以str[i]结尾的无重复子串必然不包括a位置。

根据pre的定义可知,在以str[i-1]为结尾的情况下,最长无重复子串的长度为(i-1)- pre,此时如果a的位置在pre的右边,则以str[i]结尾的最长子串的长度为 i - a;如果a的位置在pre的左边,则以str[i]结尾的最长子串的长度为i - pre。这个问题画个图就很直观了,这里不多解释。

计算完长度以后,pre位置和a位置哪一个在右边就作为新的pre的值。然后去计算下一个位置的字符,整个过程用length保存出现的最大值。

def maxLengthStr(str1):if str1 == None or str1 == '':return 0map_ = {}pre = -1for i in range(len(str1)):if str1[i] in map_:pre = max(pre,map_[str1[i]])length = max(length,i-pre)map_[str1[i]] = ireturn lengthmaxLengthStr("abcd")
maxLengthStr("aabcb")

找到字符串的最长无重复字符子串相关推荐

  1. 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案

    牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 题解: i和j两个指针分别指不重复子 ...

  2. 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...

    题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html

  3. 常考数据结构与算法:找到字符串的最长无重复字符子串

    题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...

  4. 【字符串】最长无重复字符子串练习题

    **对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度. 给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度.保证A中字符全部为小写英文字符,且长度小于等于500. ...

  5. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  6. 求字符串中最长无重复字符的子串

    题目:求一个字符串中最长的没有重复字符的子串. 思路:用hash表从i遍历查看包含i的最长 无重复子串. int max_unique_substring2(char * str) {int i,j; ...

  7. 最长无重复字符子串?

    2019独角兽企业重金招聘Python工程师标准>>> 题目要求: 给定一个字符串S,在该字符串中找到一个最长的没有重复字符的子串. 转载于:https://my.oschina.n ...

  8. java 最长不重复子串,最长无重复字符子串

    正文在下面,先打个广告: 问题描述: 输入:abdca 返回:abdc 方法一:使用双指针(滑动窗口)来实现.该方法需要配合map保存已经出现过的字符. public static int maxLe ...

  9. 求字符串中最长无重复子序列

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc" ...

最新文章

  1. 从实例学习多态(Polymorphism [pɔli'mɔ:fizm])
  2. Python Module — WSME
  3. springCloud Finchley 实战入门(基于springBoot 2.0.3)【六 Hystrix 仪表盘】
  4. SAP Spartacus 开发规范
  5. java并发排它锁_Java并发编程进阶——锁(解析)
  6. asp用于取代什么技术_苹果Mini LED晶粒四季度量产,用于新iPad Pro,三安光电或成赢家...
  7. java中main方法返回类型是6_[单选] Java application中的主类需包含main方法,main方法的返回类型是什么()。...
  8. 十八道海量数据处理面试题与相关知识讲解
  9. Java 内存模型(JMM)
  10. Mendeley Destop引用格式自定义调整
  11. 瑞萨RH850F1L用户手册(UM)CAN接口部分中文翻译(Section 19 CAN Interface (RS-CAN))
  12. EasyUI仓库管理系统
  13. k8s ingress配置自签名证书,并解决Kubernetes Ingress Controller Fake Certificate
  14. 【KITTI】KITTI数据集简介(四) — 标定校准数据calib
  15. MyEclipse2015破解安装与使用
  16. 一文搞懂 deconvolution、transposed convolution、sub-­pixel or fractional convolution
  17. sqlserver查看历史死锁信息
  18. Plant Simulation 更改字体样式
  19. 解决mac idea2020打开闪退问题
  20. 大数据 python和java_大数据入门选择Python还是Java?

热门文章

  1. nginx的反向代理以及负载均衡模块的使用
  2. 十六进制转byte变负数
  3. C++ 中 const和define的区别
  4. 原来,07年我把自己给和谐了
  5. [翻译]Chameleon介绍(3) : 列表控件
  6. 用.XML填充TreeView
  7. codeforce A - Sequence with Digits
  8. ios php 推送测试工具,IOS PushNotification - IOS推送测试 PHP 版
  9. javaaop模式供其他项目调用_Java 分布式架构的 开源的支付项目 调试实战
  10. html 播放远程视频教程,视频基于HTML5的服务器远程访问工具