AI刷题-T128找出最长的神奇数列-题解

77 阅读1分钟

其实这种题目可以参考LIS的力扣题解+每个字符串字段的判断,就是把arr[j]<arr[i]变成isMagicSequence函数

public static String solution(String inp) {
    int maxLength = 0;
    String longestMagicSequence = "";

    for (int i = 0; i < inp.length() - 2; i++) {
        for (int j = i + 2; j < inp.length(); j++) {
            if (isMagicSequence(inp.substring(i, j + 1))) {
                if (j - i + 1 > maxLength) {
                    maxLength = j - i + 1;
                    longestMagicSequence = inp.substring(i, j + 1);
                }
            }
        }
    }
    return longestMagicSequence;
}

private static boolean isMagicSequence(String sequence) {
    if (sequence.length() < 3) {
        return false;
    }
    for (int i = 1; i < sequence.length(); i++) {
        if (sequence.charAt(i) == sequence.charAt(i - 1)) {
            return false;
        }
    }
    return true;
}
    • 定义 maxLength 用于记录最长神奇数列的长度,longestMagicSequence 用于存储最长神奇数列。
    • 通过两层循环遍历输入字符串 inp 的所有子串。外层循环从索引 0 开始,内层循环从外层循环索引 i 往后 2 个位置开始,直到字符串末尾。
    • 对于每一个子串,调用 isMagicSequence 方法判断是否为神奇数列。如果是,并且长度大于当前记录的最大长度,则更新 maxLength 和 longestMagicSequence
  1. isMagicSequence 方法

    • 首先检查序列长度是否小于 3,如果是则直接返回 false
    • 遍历序列中的字符,检查相邻字符是否相同,如果有相同的字符则返回 false,如果遍历完所有字符都没有相同的相邻字符,则返回 true