2013-08-21 3 views
0

Je veux find all the substring d'une chaîne que contains a key word.Trouver toute la sous-chaîne contient un mot-clé

Ex: "Ceci est le keyword dans la chaîne".

sortie: le mot-clé, c'est le mot-clé, le mot-clé dans la chaîne, est le mot-clé dans ....

Je pense à trouver toutes les sous-chaînes d'abord essayer ensuite de filtrer un par un. Mais je pense que ce serait une très mauvaise solution.

Pourriez-vous s'il vous plaît me donner quelques conseils pour le faire !. Merci beaucoup.

J'ai modifié pour trouver simplement la séquence de jetons.

+2

Trouvez les sous-chaînes de quoi? – StephenTG

+4

Comprenez-vous que s'il y a un mot-clé dans une chaîne, cela pourrait faire partie de nombreuses sous-chaînes. Veuillez restructurer votre question pour expliquer ce que vous voulez réellement. Aussi, mieux vaut fournir le code que vous avez essayé. –

+0

qu'avez-vous essayé? avez-vous essayé d'utiliser une regex? plus d'informations sont nécessaires pour voir ce qui ne fonctionne pas ou ce qui doit être amélioré ... thx – ochi

Répondre

2

Essayez ceci:

String str = "abcdefkeybncv..."; 
String key = "key"; 
int index = str.indexOf(key); 
ArrayList<String> sub = new ArrayList<String>(); 
for (int i = 0; i < str.length(); i++) { 
    for (int j = 0; j <= str.length() - i; j++) { 
     String s = str.substring(i, i+j); 
     if(s.indexOf(key) >= 0){ 
      sub.add(s); 
     } 
    } 
} 
System.out.println(sub); 

sortie pour le code ci-dessus:

[abcdefkey, abcdefkeyb, abcdefkeybn, abcdefkeybnc, abcdefkeybncv, abcdefkeybncv., abcdefkeybncv.., abcdefkeybncv..., bcdefkey, bcdefkeyb, bcdefkeybn, bcdefkeybnc, bcdefkeybncv, bcdefkeybncv., bcdefkeybncv.., bcdefkeybncv..., cdefkey, cdefkeyb, cdefkeybn, cdefkeybnc, cdefkeybncv, cdefkeybncv., cdefkeybncv.., cdefkeybncv..., defkey, defkeyb, defkeybn, defkeybnc, defkeybncv, defkeybncv., defkeybncv.., defkeybncv..., efkey, efkeyb, efkeybn, efkeybnc, efkeybncv, efkeybncv., efkeybncv.., efkeybncv..., fkey, fkeyb, fkeybn, fkeybnc, fkeybncv, fkeybncv., fkeybncv.., fkeybncv..., key, keyb, keybn, keybnc, keybncv, keybncv., keybncv.., keybncv...] 
+0

Donc c'est O (n^2) à droite? –

+0

Oui, il a O (n^2) complexité du temps –

+0

ok, merci beaucoup. Mais puis-je réduire la complexité temporelle en utilisant l'arbre des suffixes? –

0
  1. Construire tableau de suffixe: http://en.wikipedia.org/wiki/Suffix_array
  2. Utilisez la recherche binaire pour trouver votre sous-chaîne il
  3. Déplacer vers le haut et vers le bas à partir de ce point dans le tableau des suffixes alors que les suffixes commencent par la sous-chaîne
+0

Alors, qu'en est-il de la complexité du temps? –

Questions connexes