题目:
给定一个字符串 s
,请你找出其中不含有重复字符的 最长 子串的长度。
可以使用"滑动窗口"的方法来解决这个问题。基本思路如下:
- 使用两个指针(start和end)来定义一个窗口
- 移动end指针来扩大窗口,直到遇到重复字符
- 如果遇到重复字符,移动start指针来缩小窗口,直到删除重复字符
- 在这个过程中,持续更新最长子串的长度
public class no_3 {
public static void main(String[] args) {
System.out.println(lengthOfLongestSubstring("abcabcbb"));
}
public static int lengthOfLongestSubstring(String s) {
int n = s.length();
int maxLength = 0;
int[] charIndex = new int[128]; // 用于存储字符最后出现的位置
int start = 0;
for (int end = 0; end < n; end++) {
char c = s.charAt(end);
start = Math.max(charIndex[c], start);
maxLength = Math.max(maxLength, end - start + 1);
charIndex[c] = end + 1;
}
return maxLength;
}
}