java设计一个方法,找出字符串s中不含有重复字符的连续最长子串长度
时间: 2023-10-14 12:15:23 浏览: 99
可以使用滑动窗口的思想来解决该问题。具体实现如下:
```java
public static int longestSubstringWithoutDuplication(String s) {
int n = s.length();
int maxLength = 0;
int left = 0, right = 0;
Set<Character> set = new HashSet<>();
while (right < n) {
char c = s.charAt(right);
while (set.contains(c)) {
set.remove(s.charAt(left));
left++;
}
set.add(c);
maxLength = Math.max(maxLength, right - left + 1);
right++;
}
return maxLength;
}
```
代码解释:
1. 定义两个指针 `left` 和 `right`,分别指向当前子串的左右边界。
2. 定义一个 `HashSet` 集合 `set` 用于存储当前子串中的字符。
3. 当右指针指向的字符在 `set` 集合中已经存在时,说明当前子串中有重复字符,需要向右移动左指针,直到 `set` 集合中不再包含重复字符。
4. 当左指针向右移动时,需要将 `set` 集合中对应的字符移除。
5. 每次移动左指针或右指针时,都需要更新最长子串长度 `maxLength`。
6. 最后返回 `maxLength` 即可。
测试代码:
```java
public static void main(String[] args) {
String s = "abcabcbb";
System.out.println(longestSubstringWithoutDuplication(s)); // 3
s = "bbbbb";
System.out.println(longestSubstringWithoutDuplication(s)); // 1
s = "pwwkew";
System.out.println(longestSubstringWithoutDuplication(s)); // 3
}
```
输出结果:
```
3
1
3
```
说明该方法可以正确地计算出字符串 `s` 中不含有重复字符的连续最长子串长度。
阅读全文