输入一个字符串,在其中寻找长度最长的,不含重复字符的子字符串,如果有多个长度相同的最长子字符串,则全部输出 子字符串:应由输入的字符串中的连续字符组成。 输入: input = abcdabcde 输出: abcde。使用Java实现这个算法
时间: 2024-05-15 21:17:34 浏览: 83
好的,我知道了。这个问题可以使用滑动窗口算法来解决。具体实现代码如下:
```java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
String input = "abcdabcde";
List<String> result = findLongestSubstrings(input);
System.out.println(result.toString());
}
public static List<String> findLongestSubstrings(String input) {
List<String> result = new ArrayList<>(); // 存储结果
Set<Character> set = new HashSet<>(); // 存储不重复的字符
int i = 0, j = 0; // 滑动窗口的左右指针
int maxLen = 0; // 最大长度
while (j < input.length()) {
if (set.contains(input.charAt(j))) { // 如果当前字符已经在窗口中出现过
set.remove(input.charAt(i)); // 左指针右移,移除左指针对应的字符,直到窗口中不包含当前字符
i++;
} else {
set.add(input.charAt(j)); // 右指针右移,将当前字符加入到窗口中
j++;
if (set.size() > maxLen) { // 如果窗口长度大于最大长度,更新最大长度
maxLen = set.size();
result.clear(); // 清空结果集
}
if (set.size() == maxLen) { // 如果窗口长度等于最大长度,将当前子串加入到结果集中
result.add(input.substring(i, j));
}
}
}
return result;
}
}
```
输出结果为:[abcde]
阅读全文