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

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

最新文章

  1. Leetcode: Range Addition
  2. [设计模式] 4 原型模式 prototype
  3. 前台传来的文件通过流stream转成bytes 再把文件写入数据库 类型是blob
  4. 《MATLAB数据分析与挖掘实战》赠书活动
  5. 使用ViewPager模拟实现应用程序启动界面
  6. Appium介绍
  7. Asp.net mvc 中的路由
  8. Qt框架及模块认识
  9. 第八次作业:聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用
  10. shell脚本编写某一文件夹内拷贝某一段文件(有则跳过没有则拷贝)
  11. 基于nginx+xxl-job+springboot高可用分布式任务调度系统
  12. 自己写的运用bootstrap和angulajs框架写的demo
  13. MySql数据库概念
  14. GRYZ 模 拟 赛 系 列 之 迷 宫(不就是个洪水)
  15. ansible 配置了端口在host文件但是还要走22 ip:60001 ansible_ssh_port=60001
  16. dedecms 自增数使用方法
  17. java(7)LinkedList源码
  18. poj_3987 Trie图
  19. MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回
  20. 粉刷匠(bzoj 1296)

热门文章

  1. 人工智能——Singleton模式
  2. October 15th 2017 Week 42nd Sunday
  3. Java AWT
  4. leetcode 3. Longest Substring Without Repeating Characters [java]
  5. leetcode 1. Two Sum [java]
  6. HTML常用标签大全
  7. Kafka--基础知识
  8. trufflesuite/truffle-hdwallet-provider
  9. oracle数据库flashback系列--闪回数据库在dataguard中的使用
  10. WorldWind源码剖析系列:四元数类Quaternion