题目要求检测出给定字符串的一个子串(该子串不能含有重复出现的字符)
想法:
用HashMap记录出现的字符以及其最后一次出现的下标,用containsKey检测重复性,若重复,则将滑动窗口的左边界移动到最后一次出现该字母的位置;遍历字符无论是否遇见过,都应该更新map中该字母的下标及最长子串的长度。
代码:
public int lengthOfLongestSubstring(String s) {
Map<Character, Integer> used = new HashMap<>();
int max = 0;
int left = 0;
for (int i = 0; i < s.length(); i++) {
if (used.containsKey(s.charAt(i))) {
left = Math.max(left, used.get(s.charAt(i)) + 1);
}
used.put(s.charAt(i), i);
max = Math.max(max, i - left + 1);
}
return max;
}
滑动窗口最长不重复子串
该博客探讨了如何找出字符串中最长的不包含重复字符的子串。通过使用HashMap记录字符及其最后出现的位置,滑动窗口方法有效地解决了这个问题。算法以O(n)的时间复杂度完成,对于给定的字符串`s`,它找到并返回最长子串的长度。
2816

被折叠的 条评论
为什么被折叠?



