找到字符串的最长无重复字符子串
题目:
给定一个字符串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")
找到字符串的最长无重复字符子串相关推荐
- 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案
牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 题解: i和j两个指针分别指不重复子 ...
- 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...
题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html
- 常考数据结构与算法:找到字符串的最长无重复字符子串
题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...
- 【字符串】最长无重复字符子串练习题
**对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度. 给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度.保证A中字符全部为小写英文字符,且长度小于等于500. ...
- LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)
这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...
- 求字符串中最长无重复字符的子串
题目:求一个字符串中最长的没有重复字符的子串. 思路:用hash表从i遍历查看包含i的最长 无重复子串. int max_unique_substring2(char * str) {int i,j; ...
- 最长无重复字符子串?
2019独角兽企业重金招聘Python工程师标准>>> 题目要求: 给定一个字符串S,在该字符串中找到一个最长的没有重复字符的子串. 转载于:https://my.oschina.n ...
- java 最长不重复子串,最长无重复字符子串
正文在下面,先打个广告: 问题描述: 输入:abdca 返回:abdc 方法一:使用双指针(滑动窗口)来实现.该方法需要配合map保存已经出现过的字符. public static int maxLe ...
- 求字符串中最长无重复子序列
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc" ...
最新文章
- 从实例学习多态(Polymorphism [pɔli'mɔ:fizm])
- Python Module — WSME
- springCloud Finchley 实战入门(基于springBoot 2.0.3)【六 Hystrix 仪表盘】
- SAP Spartacus 开发规范
- java并发排它锁_Java并发编程进阶——锁(解析)
- asp用于取代什么技术_苹果Mini LED晶粒四季度量产,用于新iPad Pro,三安光电或成赢家...
- java中main方法返回类型是6_[单选] Java application中的主类需包含main方法,main方法的返回类型是什么()。...
- 十八道海量数据处理面试题与相关知识讲解
- Java 内存模型(JMM)
- Mendeley Destop引用格式自定义调整
- 瑞萨RH850F1L用户手册(UM)CAN接口部分中文翻译(Section 19 CAN Interface (RS-CAN))
- EasyUI仓库管理系统
- k8s ingress配置自签名证书,并解决Kubernetes Ingress Controller Fake Certificate
- 【KITTI】KITTI数据集简介(四) — 标定校准数据calib
- MyEclipse2015破解安装与使用
- 一文搞懂 deconvolution、transposed convolution、sub-pixel or fractional convolution
- sqlserver查看历史死锁信息
- Plant Simulation 更改字体样式
- 解决mac idea2020打开闪退问题
- 大数据 python和java_大数据入门选择Python还是Java?
热门文章
- nginx的反向代理以及负载均衡模块的使用
- 十六进制转byte变负数
- C++ 中 const和define的区别
- 原来,07年我把自己给和谐了
- [翻译]Chameleon介绍(3) : 列表控件
- 用.XML填充TreeView
- codeforce A - Sequence with Digits
- ios php 推送测试工具,IOS PushNotification - IOS推送测试 PHP 版
- javaaop模式供其他项目调用_Java 分布式架构的 开源的支付项目 调试实战
- html 播放远程视频教程,视频基于HTML5的服务器远程访问工具