import java.util.HashSet;
import java.util.Set;
/**
* 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
* https://leetcode.cn/problems/wtcaE1/
* https://leetcode.cn/problems/longest-substring-without-repeating-characters/
*/
public class WtcaE1 {
/**
* 思路: 要判断 s[i, j] 没有重复字符,我们只需要判断 s[i, j) 中是否存在 s[j] 即可,
* 若存在,则left向右,直到窗口右边界不包含重复元素, 最后取上轮和此轮更大的长度.
* https://leetcode.cn/problems/wtcaE1/solution/jian-dan-yi-dong-javac-pythonjshua-dong-dtang/
*/
public int lengthOfLongestSubstring(String s) {
int len = s.length();
if (len <= 1) {
return len;
}
int maxLen = 1;
int left = 0;
int right = 0;
Set<Character> window = new HashSet<>();
while (right < len) {
while (window.contains(s.charAt(right))) {
window.remove(s.charAt(left));
left++;
}
maxLen = Math.max(maxLen, right - left + 1);
window.add(s.charAt(right));
right++;
}
return maxLen;
}
}
无重复字符的最长子串-滑动窗口-Java实现v1
最新推荐文章于 2022-11-22 12:05:06 发布