给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
题目来源:无重复字符的最长子串 - 力扣
思路:
滑动窗口:定义窗口左边界,右边界,哈希表存放字符及其位置,右边界每滑动一次往哈希表加入字符,出现重复则移动左边界到不重复位置,最后记录最大长度。
public class Solution {
public int lengthOfLongestSubstring(String s) {
// 记录不包含重复字符子串的左边最大位置
int left = 0;
int length = 1;
// 记录字符在字符串中的位置
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if (map.containsKey(s.charAt(i))) {
left = Math.max(left, map.get(s.charAt(i)) + 1);
}
map.put(s.charAt(i), i);
length = Math.max(length, i - left + 1);
}
return length;
}
}
评论区