其实这种题目可以参考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。
- 定义
-
isMagicSequence 方法:
- 首先检查序列长度是否小于
3,如果是则直接返回false。 - 遍历序列中的字符,检查相邻字符是否相同,如果有相同的字符则返回
false,如果遍历完所有字符都没有相同的相邻字符,则返回true。
- 首先检查序列长度是否小于