📅  最后修改于: 2023-12-03 15:32:05.082000             🧑  作者: Mango
当需要在一串字符中寻找最长的不重复的连续子串时,可以使用以下的Java程序。
本程序使用的算法是 滑动窗口。具体思路是,使用两个指针 i 和 j,分别表示子串的开始和结束位置,然后不断移动 j 指针,每移动一次,就将其所在的字符添加到一个集合中。如果集合中已经包含了该字符,则移动 i 指针,且删除集合中从 i 开始一直到该字符的所有字符。在移动过程中,维护一个最长子串的长度即可。
下面是 Java 代码实现的详细说明。
首先需要定义一些变量:
String s = "pwwkew"; // 输入的字符串
int n = s.length(); // 字符串的长度
Set<Character> set = new HashSet<>(); // 用于存储不重复的字符
int ans = 0; // 最长子串的长度
int i = 0, j = 0; // 用于表示子串的开始和结束位置
接下来进入主循环,不断移动 j 指针:
while (i < n && j < n) {
// 如果集合中不包含当前字符,则添加到集合中,同时增加 j 指针
if (!set.contains(s.charAt(j))) {
set.add(s.charAt(j));
j++;
ans = Math.max(ans, j - i);
} else { // 如果集合中已经包含了该字符,则移动 i 指针,且删除集合中从 i 开始一直到该字符的所有字符
set.remove(s.charAt(i));
i++;
}
}
最后,我们输出最长子串的长度:
System.out.println(ans); // 输出最长子串的长度
完整的代码如下:
public class Main {
public static void main(String[] args) {
String s = "pwwkew"; // 输入的字符串
int n = s.length(); // 字符串的长度
Set<Character> set = new HashSet<>(); // 用于存储不重复的字符
int ans = 0; // 最长子串的长度
int i = 0, j = 0; // 用于表示子串的开始和结束位置
while (i < n && j < n) {
// 如果集合中不包含当前字符,则添加到集合中,同时增加 j 指针
if (!set.contains(s.charAt(j))) {
set.add(s.charAt(j));
j++;
ans = Math.max(ans, j - i);
} else { // 如果集合中已经包含了该字符,则移动 i 指针,且删除集合中从 i 开始一直到该字符的所有字符
set.remove(s.charAt(i));
i++;
}
}
System.out.println(ans); // 输出最长子串的长度
}
}
本文介绍了如何使用 Java 程序在不重复字符的情况下查找最长子串的长度。本程序通过滑动窗口的方式解决了该问题,具有简单、高效的特点,可以在实际开发中得到广泛应用。