Java 实现无重复字符的最长字串
时间: 2024-12-19 19:15:39 浏览: 13
在 Java 中,实现无重复字符的最长字串通常涉及到动态规划或者滑动窗口算法。这里我们介绍一种基于滑动窗口的方法:
假设有一个字符串 `s`,我们需要找到其中最长时间的子序列,其中所有字符都是唯一的。我们可以维护两个指针,一个左指针 `left` 和一个右指针 `right`,分别从字符串开始向右移动。同时,我们可以创建一个哈希集合 `chars` 来存储当前窗口内的字符。
当遇到一个新的字符并且它不在 `chars` 集合中时,我们将右指针向右移动,并将该字符添加到集合和结果字符串中。如果遇到已经存在于 `chars` 集合中的字符,则更新左指针,直到窗口内不包含该字符为止,同时删除集合中的该字符。这个过程可以保证窗口内的字符始终唯一。
最后,遍历整个字符串,记录下最大的窗口长度以及对应的子串。
以下是伪代码形式:
```java
int maxLen = 0;
String result = "";
HashSet<Character> chars = new HashSet<>();
for (int right = 0; right < s.length(); right++) {
if (!chars.contains(s.charAt(right))) {
chars.add(s.charAt(right));
while (!chars.isEmpty() && left <= right - 1) {
chars.remove(s.charAt(left));
left++;
}
maxLen = Math.max(maxLen, right - left + 1);
// 更新结果字符串,包括已移除的字符
result = result.substring(0, left) + s.charAt(right);
}
}
return result.substring(0, maxLen);
```
阅读全文