Мне кажется, что-то вроде этого и спрашивается:
public class SubsequenceNotSubtring {
static void subseqNotSubstring(String word, int L) {
search(word, L, "", 0);
}
static void search(String word, int L, String subseq, int index) {
if (L == 0 && !word.contains(subseq)) {
System.out.println(subseq);
return;
}
for (int i = index; i < word.length(); i++) {
search(word, L-1, subseq + word.charAt(i), i+1);
}
}
public static void main(String[] args) {
subseqNotSubstring("apple", 3);
subseqNotSubstring("aaabbab", 3);
}
}
В этом списке перечислены все подпоследовательности заданной длины из заданной строки, которые не являются подстрока
Приведенный выше фрагмент кода обнаруживает следующее (аннотировано, дубликаты удалены):
apple,3 => apl, ape, ale, ppe
aaabbab,3 => aba, bbb
Следует отметить, что этот алгоритм является наивной грубой силой и имеет ужасную асимптотическую сложность.Лучшие алгоритмы с более сложной структурой строковых данных, конечно, могут быть придуманы при необходимости.Наиболее перспективным направлением было бы использование дерева суффиксов .