Problème: Supprimez plusieurs fois la sous-chaîne t
d'une chaîne s
et imprimez le nombre d'étapes nécessaires pour faire de même.Suppression répétée d'une sous-chaîne d'une chaîne
Exemple:t = ab
, s = aabb
. Dans la première étape, nous vérifions si t
est contenue dans s
. Ici, t est contenu au milieu, c'est-à-dire a(ab)b
. Donc, nous allons l'enlever et le résultat sera ab
et incrémenter la valeur de comptage par 1
. Nous vérifions à nouveau si t
est contenu dans s
. Maintenant, t
est égal à s
, c'est-à-dire (ab)
. Donc, nous supprimons cela de s
et incrémenter le nombre. Donc, puisque t
n'est plus contenu dans s
, on arrête et on imprime la valeur de comptage, qui est 2
dans ce cas.
J'ai essayé de résoudre ce en utilisant récursion
static int maxMoves(String s, String t) {
if (null == s || "" == s || null == t || "" == t){
return 0;
}
int i = s.indexOf(t);
if(i != -1) {
return maxMoves(s.substring(0, i)+ s.substring(i+t.length(), s.length()), t) + 1;
} else {
return 0;
}
}
Mais je ne font qu'emprunter 9/14 cas de test. J'ai également essayé ceci,
static int maxMoves(String s, String t) {
int count = 0,i;
while(true)
{
if(s.contains(t))
{
i = s.indexOf(t);
s = s.substring(0,i) + s.substring(i + t.length());
}
else break;
++count;
}
return count;
}
Mais cela a également passé seulement 9/14 cas.
Quelqu'un pourrait-il m'aider à déterminer quels cas je ne couvre pas?
pourquoi ne pas utiliser [# String remplacer] (https://docs.oracle. com/javase/7/docs/api/java/lang/String.html # replace (java.lang.CharSequence,% 20java.lang.CharSequence)) –
'" "== s' -> [Comment comparer les chaînes en Java?] (https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java), ou dans ce cas 's.isEmpty()' est plus clair. – Pshemo
Ouais, je l'ai changé mais seulement 9/14 cas sont passés. Je ne pense pas que les chaînes vides soient vérifiées. –