剑指 Offer 48-最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例1
在这里插入图片描述
示例2
在这里插入图片描述
示例3
剑指 Offer 48-最长不含重复字符的子字符串_第1张图片

题解

题解转载自krahets
方法:双指针 + 哈希表
剑指 Offer 48-最长不含重复字符的子字符串_第2张图片
图解
剑指 Offer 48-最长不含重复字符的子字符串_第3张图片

剑指 Offer 48-最长不含重复字符的子字符串_第4张图片
剑指 Offer 48-最长不含重复字符的子字符串_第5张图片
剑指 Offer 48-最长不含重复字符的子字符串_第6张图片
剑指 Offer 48-最长不含重复字符的子字符串_第7张图片
剑指 Offer 48-最长不含重复字符的子字符串_第8张图片

完整代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //map用于记录s.charAt(j)字符最近一次出现的下标
        HashMap map = new HashMap<>();
        //i指针代表以s.charAt(j)为结尾的最长无重复子串的左边界,区间为(i,j]
        int i= -1;
        //res用于记录最长无重复字符串的长度
        int res=0;
        //j指针遍历字符串s
        for(int j=0;j

你可能感兴趣的:(算法)