给定一个字符串 s ,请用java找出其中不含有重复字符的 最长子串 的长度。
时间: 2023-02-07 12:59:05 浏览: 75
你可以用滑动窗口来解决这个问题。
首先,初始化窗口的左端点 left 和右端点 right 为 0。然后,开始滑动窗口,即不断将 right 向右移动,直到窗口内的字符串包含重复的字符为止。在这个过程中,每当一个新的字符 c 被加入到窗口中,就用一个哈希表记录下字符 c 在窗口中最后出现的位置,并且每次更新答案。
当发现窗口中包含重复的字符时,就可以将 left 移动到这个重复字符最后出现的位置的右侧,并更新哈希表中的值。这样就可以保证窗口中不包含重复的字符。
下面是一个 Java 的实现例子:
```
public int lengthOfLongestSubstring(String s) {
// 哈希表,记录每个字符最后出现的位置
Map<Character, Integer> map = new HashMap<>();
int n = s.length();
// 窗口的左端点和右端点
int left = 0, right = 0;
// 窗口中不含重复字符的最长子串的长度
int maxLen = 0;
while (right < n) {
char c = s.charAt(right);
// 如果哈希表中包含字符 c,则将左端点移动到 c 最后出现的位置的右侧
if (map.containsKey(c)) {
left = Math.max(left, map.get(c) + 1);
}
// 更新哈希表,