题目:
给定一个字符串 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;}
}