给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

思路:

一个set记录i到j遇到的所有字母。

两个指针,符合条件就更新答案,并且右指针向右。

不符合就删除左指针相应的值, 并继续尝试。

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length();Set<Character> set = new HashSet<>();int ans = 0, i = 0, j = 0;while (i < n && j < n) {// try to extend the range [i, j]if (!set.contains(s.charAt(j))){set.add(s.charAt(j++));ans = Math.max(ans, j - i);}else {set.remove(s.charAt(i++));}}return ans;}
}

优化

第一:可以用map记录一下遇到的char的下标是多少,这样我们缩i的时候不用一个一个缩,而是直接到该去的位置

第二:可以不用map,因为字符种类有限,用数组记录(桶排序思想)

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;}
}

leetcode3 无重复字符最长子串相关推荐

  1. LeetCode / Scala - 无重复字符最长子串 ,最长回文子串

    一.引言 LeetCode 里有一类字符子串问题,这里主要分析无重复字符的最长子串与最长回文子串,总结相关方法. 二.无重复字符最长子串 1.题目要求 给定字符串 s,要求找出字符内无重复的最长子串, ...

  2. Leecode刷题热题HOT100(3)——无重复字符最长子串

  3. Leetcode--3. 无重复字符的最长子串

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

  4. Leetcode-3 无重复字符的最长子串【c语言】

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

  5. LeetCode--3. 无重复字符的最长子串(双指针)

    无重复字符的最长子串(C) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 这道题目是一道中等难度的题目,我们需要知道的有一点: 字符串中有包括空字符的所 ...

  6. LeetCode-3. 无重复字符的最长子串

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

  7. LetCode 3 无重复字符的最大子串

    提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabc ...

  8. 无重复字符最长字串的滑动窗口结合哈希表解法(注释详尽)

    这个解法是由leetcode上的jack这名用户上传,巧妙的使用了哈希表来缩短执行时间,非常值得学习,但是原作者并没有将原理和亮点讲的很清楚,所以我重新将它梳理了一遍发了出来. 思路: 这个解法是以常 ...

  9. php无重复字符的最长子串,无重复字符的最长字串问题

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

最新文章

  1. ORA-600 [kddummy_blkchk] [18038] 一例
  2. 厦门理工学院计算机科学与技术专业,厦门理工学院计算机类(含计算机科学与技术、网络工程、空间信息与专业2016年在福建理科高考录取最低分数线...
  3. python跟php如何共用mysql_Python 3 多个函数共用一个mysql连接
  4. CodeForces - 613D Kingdom and its Cities(虚树+贪心)
  5. 字符串分割 函数实现
  6. 解惑图数据库!你知道什么是图数据库吗?
  7. 第5章-css选择器初级和背景
  8. 近100个Spring/SpringBoot常用注解汇总!
  9. 基于bootstrap的后台左侧导航菜单和点击二级菜单刷新二级页面时候菜单展开显示当前菜单...
  10. Net Framework 4.0 和.Net Framework 4.0 Client Profile
  11. Android elevation的使用阴影
  12. linux 常用命令系列—cp 复制文件与文件夹
  13. sql的执行顺序(from平凡世界)
  14. ABAP培训进入SAP第一步
  15. 刷完 900 多道算法题的首次总结:LeetCode 应该怎么刷?
  16. 百度大脑车型识别使用攻略
  17. C++容器 vector(附代码实例讲解)
  18. hicharts堆叠柱状图堆叠数据标签显示百分比
  19. 不上架App Store怎么安装到非越狱苹果手机使用
  20. 面向交通预测的动态图卷积循环神经网络:基准和方法(重磅推荐)

热门文章

  1. vaps 程序直接通信
  2. 修改linux开机画面
  3. linux ssh注册码,linux ssh -l 命令运用
  4. hive 窗口函数_Datatist科技专栏 | Hive排序窗口函数速学教程!
  5. 【转】ABP源码分析一:整体项目结构及目录
  6. MVC和WebForm区别
  7. android webview url scheme,Android Webview ERR_UNKNOWN_URL_SCHEME错误
  8. java syncr_JAVA基础—Synchronized线程同步机制
  9. c语言哪个方法称为程序大门,学会这8个经典小程序,就相当于跨入了C语言大门...
  10. CCNP-第五篇-OSPF高级版(二)