一.算法题

  • 题目

Given a string, find the length of the longest substring without repeating characters.

  • Example
  • Given "abcabcbb", the answer is "abc", which the length is 3.
  • Given "bbbbb", the answer is "b", with the length of 1.
  • Given "pwwkew", the answer is "wke", with the length of
  • Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

二.算法题解读

  • 题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度
  • 解读Example
  • 给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3
  • 给定"bbbbb",最长子串就是"b",长度就是1
  • 给定pwwkew,最长子串就是"wke",长度为3,
  • ==注意,==必须是一个子串."pwke",是子序列,而不是子串

三.优化"滑动窗口"解决思路
到底如何在滑动窗口方法上优化了? 实际上我们可以如果采用进一步优化,可以达到只需要N次即可计算成功.我们可以定义字符到索引映射.而不是使用集合来判断这个字符的存在与否.当遇到重复的字符时,我们即可跳过该滑动窗口.
也可以理解为,如果s[j]在[i,j)的范围内有与j'重复的字符.我们不需要逐渐增加i.而是直接跳过[i,j']范围内的所有元素.并将i变成为j'+1就可以做到.
四.代码实现java code

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;//获取当前字符索引Map<Character, Integer> map = new HashMap<>();         //修改[i,j]的范围       for (int j = 0, i = 0; j < n; j++) {if (map.containsKey(s.charAt(j))) {i = Math.max(map.get(s.charAt(j)), i);}ans = Math.max(ans, j - i + 1);map.put(s.charAt(j), j + 1);}return ans;}
}

五.使用ASCII 128码 思路
字符串,其实由字符构成.而字符则可以用ASC码来替代.如此,我们可以用整数数组作为直接访问表来替换Map.常用表如下:
int [26],用于表示字母 "a" - "z" 或 "A" - "Z";
int [128],用于表示ASCII码
int [256],用于表示扩展ASCII码
A = 65, a = 97

六.代码实现java code

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;int[] index = new int[128];         for (int j = 0, i = 0; j < n; j++) {i = Math.max(index[s.charAt(j)], i);ans = Math.max(ans, j - i + 1);index[s.charAt(j)] = j + 1;}return ans;}
}

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:642363427不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...相关推荐

  1. python最长连续子串_LeetCode 03无重复字符的最长子串(滑动窗口)

    关注.在看,回复进群打卡 题目描述 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为 ...

  2. LeetCode精讲 03无重复字符的最长子串(滑动窗口)

    题目描述 原创作者:bigsai,维护不易,如有收获,还请点赞.收藏支持! 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcb ...

  3. JAVA窗口sin值_大厂经典笔试题—LeetCode03无重复字符的最长子串(滑动窗口)

    题目描述 原创作者:bigsai,长期维护不易,如有收获还请点赞.收藏支持! 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabc ...

  4. python学习3. 无重复字符的最长子串(滑动窗口)

    makcooo 2019-04-19 15:47:32  271  收藏 分类专栏: python 版权 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: &quo ...

  5. LeetCode 3. 无重复字符的最长子串 (滑动窗口哈希表)

    3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...

  6. Leetcode刷题100天—3. 无重复字符的最长子串(滑动窗口+集合+双指针)—day21

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 3. 无重复字符的最长子串 难度中等6009收藏分享切换为英文接收动态反馈 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 ...

  7. python经典算法题:无重复字符的最长子串

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

  8. 《画解算法》3. 无重复字符的最长子串【python3丨简单】

  9. 最长不重复子串python_python经典算法题:无重复字符的最长子串

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

最新文章

  1. 世界人工智能创新大赛来了!
  2. HDU 3374 String Problem (KMP+最大最小表示)
  3. 微软官方上线了Python教程,7个章节就把Python说通了!
  4. 航空企业如何用「AI利器」提升乘客体验
  5. 工具|渗透利器之CrimeFlare、waf绕过脚本分享
  6. HDU 4879 ZCC loves march (并查集,set,map)
  7. Linux下软件安装和卸载
  8. Transformer 这么强,该从何学起?
  9. ssis 计划任务_SSIS Hadoop连接管理器和相关任务
  10. python 使用迭代来创建集合
  11. Hash算法大全(java实现)
  12. 山大824计算机基础,山大考研辅导班:山东大学2020年824计算机基础考研自命题科目考试大纲...
  13. EasyDarwin —— windows搭建rtsp服务,使用FFmpeg进行rtsp推拉流
  14. 联想计算机不能使用ghost,如何解决联想台式机不能重装系统
  15. 庄表伟:License之外,社区的规则与潜规则 | DEV. Together 2021 中国开发者生态峰会...
  16. 以太坊nonce详解
  17. nodejs-指定长度断句
  18. c语言中用递推法解决渔夫问题,递归、递推 - IT小冰的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. cocos2dx layer理解
  20. 笛卡尔坐标变换: UVA1602

热门文章

  1. 说唱计算机网红,首档喊麦节目太奇葩,蹭了说唱热度,还请了被封杀网红当导师...
  2. 基于zookeeper实现分布式配置中心(二)
  3. miui秒解bl锁_MIUI12解锁bl篇(原谅我的过失,接上篇文章)
  4. linux查看java虚拟机内存_深入理解java虚拟机(linux与jvm内存关系)
  5. 图解自监督学习(CV)
  6. mysql修改表的字段_mysql修改表字段学习笔记
  7. empinfo Oracle数据库,Oracle数据库---包
  8. c是过程化语言吗数据库,A.数据库语言B.过程化语言C.宿主语言D.数据库管理系统...
  9. java 刽子手游戏_java基础(九):容器
  10. python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)