思路:
比如 : "dvdfzxd"字符串,我要求他的最长无重复字符的子串。
可以知道的,一定要从开头遍历到结尾。
这样,从第一个开始,一直读,直到最后一个,如果读到的字符与之前的重复了,
那么前面部分就可以看成一个符合要求的子串,记录它的长度。那么接下来就是跳过
刚重复的字符,以它的下一个节点为起点,重新计算一个新的子串的长度。
比如这里,遍历到第3个元素d时,与第一个d重复,那么记录,子串长度2,从v开始
就算新的子串的长度。
思路是这样,但是怎么知道之前的字符重复过了?
HashMap能够很好的帮我们解决。
用它来存储<字符,小标> 。
但是,"abba"这种情况,该怎么解决了?
当我们读到第2个a是,明显他们之间还有其他的重复字符。
可以通过设置一个起点变量,来表示现在计算的子串的起点,同时如果重复,则每次都更新为
最新的小标。
综上,得到代码:
public class Solution { public int lengthOfLongestSubstring(String s) { HashMap<Character , Integer> map = new HashMap<> (); int sum = 0; int max = 0; int start = 0; for(int i = 0 ; i < s.length() ; i++) { char c = s.charAt(i); if(map.containsKey(c)) { int idx = map.get(c); //如果重复的元素在新子串内 if(idx >= start) { //更新为最新的下标 map.put(c,i); //最新的无重复元素的子串则是去掉第一个相同的元素 sum = i - idx; //新子串的起点 start = idx + 1; } else { //更新节点为最新的位置 map.put(c ,i); sum++; } } else { map.put(c , i); sum++; } max = Math.max(sum , max); } return max; } }
相关推荐
Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3.
Longest Substring Without Repeating Characters" 描述的是一个经典的计算机编程问题,通常出现在面试或编程竞赛中。这个题目要求我们找到一个字符串中最长的子串,该子串中没有重复的字符。这是一个非常基础但又...
这道题目是LeetCode中的第3题,名为“无重复字符的最长子串”(Longest Substring Without Repeating Characters)。这个问题涉及到字符串处理、滑动窗口算法以及动态规划等概念。 首先,我们要明确问题的目标:...
本压缩包文件聚焦于LeetCode的第3题,即“无重复字符的最长子串”(Longest Substring Without Repeating Characters)。这是一道经典的字符串处理问题,旨在测试程序员对字符串操作、滑动窗口以及哈希映射等数据...
在本压缩包中,我们关注的是Java编程语言在解决LeetCode算法问题上的应用,特别是针对第3题“无重复字符的最长子串”(Longest Substring Without Repeating Characters)的解决方案。这是一道非常经典的字符串处理...
本资源包聚焦于LeetCode中的第3题——"无重复字符的最长子串"(Longest Substring Without Repeating Characters)。这道题目是字符串处理的经典问题,对理解C++中的字符串操作、滑动窗口算法以及动态规划有很好的...
在压缩包`longest-substring-without-repeating-characters-master`中,可能包含了这个问题的不同实现版本,以及可能的测试用例和相关的文档。通过查看源代码和相关资料,你可以深入理解这个问题的各种解决方案,并...
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters 一上来没啥思路,好久不做题...
(无重复字符的最长子串) Medium Dual Pointer (Sliding Window), Hash Table 4 Median of Two Sorted Arrays (寻找两个有序数组的中位数) Hard Divide and Conquer 5 Longest Palindromic Substring (最长回文子串) ...
最长没有重复字符的子序列 记录各字符最近一次出现的位置 4. Median of Two Sorted Arrays 求两有序数列的中位数,可泛化为求两有序数列的第k位数,二分法 5. Longest Palindromic Substring 最长回文子串,补符号,...
无重复字符的最长子串 string 4 LMedian of Two Sorted Arrays 两个排序数组的中位数 ary,binary search,dive and conquer 5 Longest Palindromic Substring 最长回文子串 string,dp 8 String to Integer(atoi) 字符...
无重复字符的最长子串 4. Median of Two Sorted Arrays 寻找两个有序数组的中位数 5. Longest Palindromic Substring 最长回文子串 6. ZigZag Conversion Z字型变换 7. Reverse Integer 整数反转 8. String to ...
答案LeetCode-Longest_Substring_Without_Repeating_Characters 这是LeetCode上“最长子串无重复字符”问题的解决方案。 问题描述:给定一个字符串,求没有重复字符的最长子串的长度。 示例 1:输入:“abcabcbb” ...
无重复字符的最长子串:3. Longest Substring Without Repeating Characters - 最小跳跃步数问题 - 动态规划 + 循环策略优化:45. Jump Game II - 二叉树 前序遍历判断二叉树:98. Validate Binary Search Tree - 二...
1. Longest Substring Without Repeating Characters(无重复字符的最长子串) 知识点:字符串遍历、滑动窗口、哈希表 这个问题需要找出给定字符串中最长的无重复字符子串的长度。可以通过滑动窗口技术实现,即使...
3. **Longest Substring Without Repeating Characters** (Medium) 这个挑战是寻找给定字符串中最长的无重复字符的子串。可以采用滑动窗口或哈希表的方法,用哈希表记录字符最后出现的位置,每次移动窗口时检查新...
无重复字符的最长字串 Longest Substring Without Repeating Characters.cpp 4 寻找两个有序数组的中位数 Median of Two Sorted Arrays.cpp 5 最长回文子串 Longest Palindromic Substring.cpp 7 整数反转 Reverse ...
3. **Longest Substring Without Repeating Characters**(无重复字符的最长子串):该问题旨在找到一个字符串中最长的子串,其中不包含任何重复字符。解题策略可能包括滑动窗口或使用哈希表来跟踪字符出现的状态。...
最长的不出现重复字符的子串。 典型的two points问题,枚举左端点,维护右端点的右移。用个数组记录一下字符出现个数就ok了。O(n)。 不了解two points的话,也很容易想到具有单调性,枚举左端点,二分右端点,维护...