无重复字符的最长子串 java
时间: 2024-10-19 14:05:34 浏览: 22
在 Java 中,求解字符串中无重复字符的最长子串是一个常见的动态规划问题。通常我们可以使用滑动窗口的概念来解决。以下是基本的算法步骤:
1. 定义两个指针,left 和 right,分别表示当前子串的起始和结束位置。
2. 创建一个布尔型数组或哈希集合(HashSet)用于存储每个字符是否已经在当前子串中出现过。
3. 当右指针向右移动时,检查新字符(s[right])是否已存在于哈希集合中。如果存在,则将左指针向右移动,直到该字符从子串中移除(即哈希集合中移除)。这一步是为了保证左闭区间内所有字符都是唯一的。
4. 更新最长子串长度记录(maxLen),并更新最长子串起始位置(maxLengthStart)。
5. 移动右指针,并继续上述过程,直至遍历完整个字符串。
下面是一个简单的 Java 代码示例:
```java
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) return 0;
Set<Character> set = new HashSet<>();
int left = 0, maxLength = 0, maxLengthStart = 0;
for (int right = 0; right < s.length(); right++) {
if (!set.contains(s.charAt(right))) {
set.add(s.charAt(right));
maxLength++;
} else {
set.remove(s.charAt(left)); // 移除左侧的第一个重复字符
left++;
}
maxLength = Math.max(maxLength, right - left + 1);
}
return maxLength;
}
```
阅读全文