博客
关于我
LetCode刷题记录--No3-无重复字符的最长子串
阅读量:292 次
发布时间:2019-03-03

本文共 1506 字,大约阅读时间需要 5 分钟。

这道题 思路是半路卡住了 看到题目瞬间想到了Map解决 但是没想到特别好的解决办法,暴力接法会很慢,后来看了某大神的分享,根据自己理解 完成了题目

题目:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例 4:
输入: s = “”
输出: 0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters

解题思路:

看到这道题目 要理解题目

1、首先肯定要两个指针,一个记录首 A,一个记录尾 B
这样才能拿到长度
2、A指针不动,B向右移动指针遇到了重复,长度为指针索引差+1 要记住这个值
3、 最重要的一点!如果遇到了重复字符 C 下一次 A 应该从哪开始算
a) 这个时候上次动的 B 指针应该继续向右动 这个没有异议吧
b)刚才不动 A 的从哪里来开始,应该从重复的字符 C 出现第一次的右边开始
c)所以就需要有个地方存储 C 第一次是从哪出现的,因为此时一直动的已经在C第二次出现的地方了
d)Java中 肯定是map最合适不过了 没有异议吧 hash算法查找速度很快

代码实现

public int maxLength(String s) {       //存储临时位置的map	Map
map = new HashMap<>(); int result = 0; int length = s.length(); for (int end = 0, start = 0; end < length; end++) { Character c = s.charAt(end); if (map.containsKey(c)) { start = Math.max(start, map.get(c)); } // 这里加1的原因是 记录长度 尾-首+1 result = Math.max(result, end - start + 1); // 这里加1的原因是 每次首应该是从重复的右边第一个开始算 因为 // end 已经遇到重复了. 这个 + 1 可以放到上面 if 里面也是可以的 // 比如 aba。当第一次重复 end 应该是 2 start = 0 + 1。 // 0就是 字母a 第一次出现的位置 这个时候end的位置也是a // 所以start 需要从b开始算 map.put(c, end + 1); } return result;}

这道题已经有点费脑筋了 哈哈哈。继续努力

转载地址:http://zgpm.baihongyu.com/

你可能感兴趣的文章
【pgsql-参数详解1】PostgreSQL默认参数值
查看>>
PostgreSQL11-Hash哈希分区数量的设定标准
查看>>
HTTP协议(1)_入门的一些教程和资源
查看>>
2021年春季ACM训练赛第3场
查看>>
Go-常用命令go的使用(build、env、run、fmt等)
查看>>
钉钉登录及常用的URL及IP
查看>>
CENTOS 删除nginx
查看>>
【redis键过期删除策略】很高兴再次认识你
查看>>
【工具篇】EasyExcel的应用
查看>>
SSM发送手机验证码——以网建SMS为例
查看>>
大范围卫星影像快速处理
查看>>
监控264后缀文件播放
查看>>
网站在线偷拍照片源码
查看>>
Thinkphp6.0+vue个人虚拟物品发卡网站源码
查看>>
手游服务端框架之关于玩家数据的解决方案
查看>>
游戏服务端框架之网关
查看>>
游戏服务端框架之模仿SpringMvc实现消息路由
查看>>
动态摇动吊牌自适应网站404页面源码
查看>>
炫酷文字消失动画网站404页面源码
查看>>
EMLOG模板山河网站主题分享
查看>>