工欲善其事必先利其器

题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

- public int lengthOfLongestSubstring(String s) {
- int n = s.length();
- int[] charIndex = new int[128]; // 用于存储字符的索引,ASCII字符集共有128个字符
- int maxLength = 0;
- int left = 0; // 左边界位置
-
- for (int right = 0; right < n; right++) {
- char currentChar = s.charAt(right);
- // 如果字符已经在窗口内出现过,将左边界移到上一次出现的位置之后
- if (charIndex[currentChar] > left) {
- left = charIndex[currentChar];
- }
- // 计算当前窗口的长度
- int windowSize = right - left + 1;
- // 更新字符索引
- charIndex[currentChar] = right + 1;
- // 更新最大长度
- maxLength = Math.max(maxLength, windowSize);
- }
-
- return maxLength;
- }