无重复字符的最长子串

简介: 无重复字符的最长子串

无重复字符的最长子串

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

示例 1:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

一、解题思路

看到任何一个关于什么子串问题,还是了数组问题
先这么想,以i结尾最长的答案是什么或者以i开头最长的答案是什么
这道题我们想以i结尾最长子数组是多长

答案是从左往右求的
当我来到i位置的时候,i-1位置的答案你求过了,i-2位置的答案你求过了,i-3位置的答案你求过了
那么我就想我结尾时的答案能不能由我之前求出答案帮我加速得到,
为啥要把求解流程定位每个位置结尾或每个位置开头,我就是想用动态规划

二、代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        char[] str=s.toCharArray();
        int n=str.length;
        int[] map=new int[256];
        for(int i=0;i<256;i++){
            map[i]=-1;
        }
        int pre=0;
        int ans=0;
        int cur=0;
        for(int i=0;i<n;i++){
            int p1=i-map[str[i]];
            int p2=pre+1;
            cur=Math.min(p1,p2);
            ans=Math.max(ans,cur);
            pre=cur;
            map[str[i]]=i;
        }
        return ans;

    }
}
相关文章
|
索引
LeetCode3-无重复字符的最长子串
LeetCode3-无重复字符的最长子串
|
29天前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
57 0
Leetcode第三题(无重复字符的最长子串)
|
3月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
5月前
3. 无重复字符的最长子串
3. 无重复字符的最长子串
|
5月前
|
存储 算法 数据挖掘
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
|
6月前
|
并行计算
求无重复字符的最长子串
求无重复字符的最长子串
|
6月前
|
存储 算法 Go
LeetCode 第三题: 无重复字符的最长子串
  给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
|
6月前
leetcode-3:无重复字符的最长子串
leetcode-3:无重复字符的最长子串
35 0
|
6月前
leetcode:3. 无重复字符的最长子串
leetcode:3. 无重复字符的最长子串
34 0
无重复字符的最长子串
写一个if语句,当left小于right的时候,就写一个循环遍历从left下标开始的元素到right下标前面的元素,判断是否与right下标的元素相同,相同的话就跳出循环,令left 等于 与 right下标元素相同的元素后面的元素.怎么判断在left和right之间是否存在又和right相同的元素呢?这就用到了falg.如果left < right 的时候就让 right++; max = max = right - left + 1。
54 0