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

  示例 1:

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

  示例 2:

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

  

  题目思路:建立hashmap,记载每个字符出现的位置,并设变量index记载子串起始的下标,然后从下标为0开始遍历字符串
  遍历到下标i时,此时有两种情况:
  1.hashmap中没有该字符s.charAt(i)或者hashmap中有该字符s.charAt(i),但该字符map.get()不在index后,此时可以直接map.put(),添加或替换数据
  2.hasmap中有该字符s.charAt(i)并且map.get()在index后,此时代表有重复字符,计算此时的字串,并使index=重复字符下标+1,最后map.put()替换数据

  

  详细说明例子:  (i为遍历下标,char为s.charAt(i),index为子串开始下标)

   输入:“abcabcbb”

  第一次遍历:i=0,char=a,进入情况1,index=0,子串:“a”,map中(a:0)

  第二次遍历:i=1,char=b,进入情况1,index=0,子串:“ab”,map中(a:0,b:1)

  第三次遍历:i=2,char=c,进入情况1,index=0,子串:“abc”,map中(a:0,b:1,c:2)

  第四次遍历:i=3,char=a,进入情况2,因为map.get(a)=0>=index,所以有重复数据a,计算此时的子串长度(3-0=3),与最大长度比较,并让index+=1,更新map数据

        index=1,子串:“bca”,map中(b:1,c:2,a:3)

  第 i 次遍历:以此类推

  

 import java.util.HashMap;
class Solution {
public int lengthOfLongestSubstring(String s) {
//建立hashmap,记载每个字符出现的位置
HashMap<Character,Integer> map=new HashMap<>();
//记载起始的下标
int index=0;
int maxlen=Integer.MIN_VALUE;
if(s.length()==0)
return 0;
//遍历字符串
for(int i=0;i<s.length();i++){
//得到下标为i的字符
char c=s.charAt(i);
//情况2
if(map.containsKey(c)&&map.get(c)>=index){
//此时子串长度与maxlen比较,更新maxlen
maxlen=(i-index)>maxlen?i-index:maxlen;
//使index=重复字符下标+1,避开重复字符
index=map.get(c)+1;
}
//更新map
map.put(c,i);
}
//最后再比较一次,以防止"abcdefg"该情况出现
maxlen=(s.length()-index)>maxlen?s.length()-index:maxlen;
return maxlen;
}
}

LeetCode-3.无重复字符的最长字串的更多相关文章

  1. LeetCode#3 - 无重复字符的最长字串(滑动窗口)

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: abcabcbb 输出的结果应该是3,最长的无重复的字串是'abc' 果然无论做什么都要静下心来啊!昨晚上卡了一个多小 ...

  2. 【leetcode算法-中等】3. 无重复字符的最长字串

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

  3. Leetcode3.Longest Substring Without Repeating Characters无重复字符的最长字串

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

  4. Leetcode(三)无重复字符的最长子串

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

  5. 【LeetCode】无重复字符的最长子串【滑动窗口法】

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

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

    题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...

  7. 【leetcode 3. 无重复字符的最长子串】解题报告

    思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...

  8. LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...

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

    难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ...

随机推荐

  1. 通过sqli-labs学习sql注入——基础挑战之less1-3

    首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...

  2. easyui学习笔记14-拓展的基本验证规则

    /** * 扩展的基本校验规则, */ $.extend($.fn.validatebox.defaults.rules, { minLength : { // 判断最小长度 validator : ...

  3. IIS中添加MIME类型

    今天上传一个html5后台管理模版的时候,在服务器上预览发现网页加载的远程woff类型的字体不显示,如下图所示: 在本地预览的时候,正常加载字体文件应该是这样的: 利用url访问字体文件的时候提示:该 ...

  4. Django商城项目笔记No.8用户部分-注册接口实现

    Django商城项目笔记No.8用户部分-注册接口实现 users的view.py中增加如下代码 class RegisterUserView(CreateAPIView): "" ...

  5. Mapreduce运行过程分析(基于Hadoop2.4)——(二)

    4.3 Map类    创建Map类和map函数.map函数是org.apache.hadoop.mapreduce.Mapper类中的定义的,当处理每一个键值对的时候,都要调用一次map方法,用户须 ...

  6. Redis系列七:redis持久化

    redis支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失 一.RDB持久化 RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发 手动触发 ...

  7. BZOJ5102:[POI2018]Prawnicy(贪心,堆)

    Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...

  8. oracle 批量更新merge语句

    merge into (SELECT * FROM QUERY_DB1.test_MPOS  ) T1 using (SELECT FLAG FLAG1,IN_MNO FROM QUERY_DB1.t ...

  9. C#中使用WeiFenLuo.WinFormsUI.Docking.dll实现窗口停靠效果

    很酷的效果,很值得好好去学习的哈. 重置工具箱: 新建一个WinForm程序,项目名称为TestDockPanelControl.选中Form1窗体后选择工具箱--->>新建个添加选项卡命 ...

  10. python变量的引用,浅拷贝

    python的变量是对象引用 l1和l2引用的相同的对象,所以会相互影响 元组不变的是引用的物理地址,如果引用的对象是可变的,那么远祖也会发生变化 但是t1[2]的id时钟没有发生变化 2 默认是浅拷 ...