欢迎访问宙启技术站
智能推送

Java函数:如何找到字符串中最长的联续子序列?

发布时间:2023-06-25 22:36:03

问题描述

给定一个字符串s,找到其最长的连续子序列,使得子序列中的所有字符均相同。例如,对于字符串s="abcaaaaaadefggh",其最长的连续子序列是"aaaaaa"。

解题方法

该问题可以通过遍历字符串s,并利用两个指针i和j记录当前最长连续子序列的起始和结束位置来解决。具体思路如下:

1. 初始化指针i和j为0,maxlen为0

2. 遍历字符串s,记录当前字符ch以及其连续出现的次数count

3. 如果当前字符ch与前面遍历的字符不同,则更新指针i为当前位置,同时将count重置为1

4. 如果当前字符ch与前面的字符相同,更新指针j为当前位置,更新maxlen为当前最长连续子序列的长度

5. 最后返回最长连续子序列的起始位置i以及其长度maxlen即可

Java代码演示

public class LongestSubstring {

    public static void main(String[] args) {

        String s = "abcaaaaaadefgggh";

        int i = 0, j = 0;

        int maxlen = 0;

        int n = s.length();

        for (int k = 1; k < n; k++) {

            if (s.charAt(k) != s.charAt(k - 1)) {

                if (maxlen < k - i) {

                    maxlen = k - i;

                    j = k - 1;

                }

                i = k;

            }

        }

        if (maxlen < n - i) {

            maxlen = n - i;

            j = n - 1;

        }

        System.out.println("Longest substring: " + s.substring(i, j + 1));

        System.out.println("Length: " + maxlen);

    }

}

该代码先遍历字符串s,将当前字符ch以及其连续出现的次数count记录下来。如果遇到一个新的字符,就更新指针i为当前位置,同时将count重置为1。如果遇到一个和前面字符相同的字符,就更新指针j为当前位置,更新maxlen为当前最长连续子序列的长度。最后返回最长连续子序列的起始位置i以及其长度maxlen即可。

代码输出结果为:

Longest substring: aaaaaa

Length: 6

总结

以上就是寻找字符串中最长的联续子序列的Java代码实现方法。该方法的时间复杂度为O(n),因为只需要遍历一次字符串s即可找到最长连续子序列。对于需要频繁处理此类问题的程序员来说,这种方法可以提高代码的效率。