📜  Java程序在不重复字符的情况下查找最长子串的长度(1)

📅  最后修改于: 2023-12-03 15:32:05.082000             🧑  作者: Mango

Java程序在不重复字符的情况下查找最长子串的长度

当需要在一串字符中寻找最长的不重复的连续子串时,可以使用以下的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 程序在不重复字符的情况下查找最长子串的长度。本程序通过滑动窗口的方式解决了该问题,具有简单、高效的特点,可以在实际开发中得到广泛应用。