参考他的人代码:https://blog.csdn.net/littlebai07/article/details/79100081

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

示例 1:

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

示例 2:

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

示例 3:

输入: "pwwkew"
输出: 3
解释: 无重复字符的最长子串是 "wke",其长度为 3。
  请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。             距离abcabcbb
思路:遍历字符串,从一个字符到最后一个字符。如果字符不存在,则加入Map中,temp长度增加。
i表示当前所在位置,i-temp表示map中字符串的初始位置。
如果该字符已经在map中存在,则分两种情况处理:1.当前遍历的字符的位置在i-temp的范围内,那么
将temp截断。也就是重新在i+1的位置开始遍历字符串的。比如abca,temp=当前位置(4)减去第一个a的位置(1),也就是从第二个a开始
遍历字符串。
2.如果当前遍历的字符串不在i-temp的范围内,temp++,同时立即更新该字符串在map中的位置,比如abdacbeg,从第二个a开始重新遍历,
遇到第二个b,由于第一个b的字符不在i-temp的范围内,因此temp+1,同时更新b的map。
字符串 Map temp
a—-bcabcbb {a:0} 1
ab—-cabcbb {a:0,b:1} 2
abc—-abcbb {a:0,b:1,c:2} 3
abca—-bcbb {a:3,b:1,c:2} 3
abcab—-cbb {a:3,b:4,c:2} 3
abcabc—-bb {a:3,b:4,c:5} 3
abcabcb—-b {a:3,b:6,c:5} 2
abcabcbb {a:3,b:7,c:5} 1

代码如下:

class Solution {
public int lengthOfLongestSubstring(String s) {
char [] c=s.toCharArray();
int len=s.length();
Map<Character,Integer> map=new HashMap();
int max=Integer.MIN_VALUE;
int temp=0;
for(int i=0;i<len;i++){
if(map.containsKey(c[i])){
if(map.get(c[i])+temp<i){ // 列举到第二个C的时候,此时temp截断,从c开始计算位置,i-temp表示起始位置
temp++;
}else{
max=Math.max(temp,max);
temp=i-map.get(c[i]);
}
map.put(c[i],i);
}else {
map.put(c[i],i);
temp++;
}
}
max=Math.max(max,temp);
return max;
}
}

如果有不理解的地方,希望读者可以自己举例,或者通过Java中的Debug,可以清晰地了解字符串遍历的过程。

leetcode-最长无重复字符的子串的更多相关文章

  1. [LeetCode] Longest Substring Without Repeating Characters 最长无重复字符的子串 C++实现java实现

    最长无重复字符的子串 Given a string, find the length of the longest substring without repeating characters. Ex ...

  2. lintcode: 最长无重复字符的子串

    题目 最长无重复字符的子串给定一个字符串,请找出其中无重复字符的最长子字符串. 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 ...

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

    384-最长无重复字符的子串 给定一个字符串,请找出其中无重复字符的最长子字符串. 样例 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc" ...

  4. [LeetCode] Longest Substring Without Repeating Characters 最长无重复字符的子串

    Given a string, find the length of the longest substring without repeating characters. Example 1: In ...

  5. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  6. 最长无重复字符的子串 · Longest Substring Without Repeating Characters

    [抄题]: 给定一个字符串,请找出其中无重复字符的最长子字符串. 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3. 对于, ...

  7. LeetCode刷题--无重复字符的最长子串(中等)

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

  8. LeetCode Golang 3. 无重复字符的最长子串

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

  9. python刷LeetCode:3.无重复字符的最长子串

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

随机推荐

  1. NSString,NSData,NSFileManager常用方法

    一.利用NSString类进行文件路径的处理 文件路径格式: NSString *path=@"/Uesrs/apple/testfile.txt" 常用方法汇总: 1.获得组成此 ...

  2. The Linux Kernel

  3. EDA风格与Reactor模式

    本文将探讨如下几个问题: Event-Driven架构风格的约束 EDA风格对架构属性的影响 Reactor架构模式 Reactor所解决的问题 redis中的EventDriven 从观察者模式到E ...

  4. 利用DBMS_REDEFINITION包将非分区表转化成分区表

    将普通表格转化分区表的方法大致有四种: A. 通过 Export/import 方法B. 通过 Insert with a subquery 方法C. 通过 Partition Exchange 方法 ...

  5. Linux中文件函数(二)

    一.link.linkat.unlink.unlinkat.remove函数 创建一个指向现有文件的链接的方法是使用link函数或linkat函数.函数的原型为: #include <unist ...

  6. golang刷Leetcode系列 --- 加1

    加一 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 ...

  7. (Nagios)-check_openmanage[Dell]

      Nagios->check_openmanage[Dell R7*] 2014年11月13日 下午 07:44 需求介绍: 透过Nagios监控Dell R7系列服务器硬件状态 环境信息: ...

  8. 用PHP读取Excel、CSV文件

    PHP读取excel.csv文件的库有很多,但用的比较多的有: PHPOffice/PHPExcel.PHPOffice/PhpSpreadsheet,现在PHPExcel已经不再维护了,最新的一次提 ...

  9. xp sp3安装.Net 4.0提示严重错误,0x80070643,解决办法2017版

    客户电脑上要装金税开票软件,需要.net 4.0.30319.1,电脑环境是xp sp3,已经安装了.net 2, .net 3.5sp1,安装.net 4.0的时候提示错误0x80070643 因为 ...

  10. 第6章 AOP与全局异常处理6.1-6.4 慕课网微信小程序开发学习笔记

    第6章 AOP与全局异常处理 https://coding.imooc.com/learn/list/97.html 目录: 第6章 AOP与全局异常处理6-1 正确理解异常处理流程 13:236-2 ...