Je crois que quelque chose de ce genre est ce qui demande:
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);
}
}
cette liste tous subsequences de une longueur donnée d'une chaîne donnée qui n'est pas substrings.
L'extrait ci-dessus trouve les suivants (annotés, enlevés): dupes
apple,3 => apl, ape, ale, ppe
aaabbab,3 => aba, bbb
Il convient de noter que cet algorithme est la force brute naïve et a horreur de la complexité asymptotique. De meilleurs algorithmes avec une structure de données de chaîne plus sophistiquée pourraient certainement être concoctés si nécessaire. La direction la plus prometteuse serait d'utiliser un suffix tree.
Qu'est-ce qui rendrait "singe" la réponse à la première question plutôt que, disons, "peut"? –
@paranay Il me semble que vous voulez vérifier "sont les caractères de x dans y"? Sinon, je ne comprends pas. :) – InsertNickHere
ce n'est pas une sous-chaîne de "pomme" – pranay