/*
解决思路:1用begin,end表示子串开始和结束的位置
2用hash表检查重复字符
3从左向右查看每个字符,如果
-没有遇到重复字符的话,调整end
-遇到重复的字符的话,调整begin
-将当前字符放入hash表中
4 end-begin+1就是当前字串的长度
*/
public static int lengthOfLongestSubstring(String s) {
// 创建一个HashMap用于存储字符及其在字符串中的最新位置
HashMap<Character, Integer> map = new HashMap<>();
// 初始化窗口的起始位置
int begin = 0;
// 初始化最长子串的长度
int maxLength = 0;
// 遍历整个字符串
for (int end = 0; end < s.length(); end++) {
// 获取当前字符
char x = s.charAt(end);
// 判断当前字符是否已经在窗口中出现过
if (map.containsKey(x)) {
// 如果出现过,更新窗口的起始位置为上一次该字符出现的位置的下一个位置
begin = Math.max(begin,map.get(x) + 1);
// 更新该字符在窗口中的最新位置
map.put(x, end);
} else {
// 如果没有出现过,将该字符及其位置添加到HashMap中
map.put(x, end);
}
// 更新最长子串的长度,取当前长度和之前的最大长度的较大值
maxLength = Math.max(maxLength, end - begin + 1);
}
// 返回最长子串的长度
return maxLength;
}
leetcode最长不重复子串
本文介绍了一种使用Java编程语言解决求解字符串中最长无重复字符子串长度的方法,利用HashMap数据结构跟踪字符出现的位置,动态调整子串范围以避免重复字符。
摘要由CSDN通过智能技术生成