On m'a posé une question similaire à celui-ci sur HackerRank: Check If there exists a CircleTrouver s'il existe un cercle donné se déplace
La différence était que F a été remplacé par G (G signifie savoir avancer d'une étape).
J'ai implémenté un algorithme comme celui décrit dans la réponse acceptée, mais j'ai échoué un cas de test. Quelqu'un pourrait-il trouver le bug pour moi?
static String checkIfCircleExists(String s) {
int x = 0;
int y = 0;
int dir = 0;
for (char c : s.toCharArray()) {
switch (c) {
case 'G':
switch (dir) {
case 0:
y++;
break;
case 1:
x++;
break;
case 2:
y--;
break;
case 3:
x--;
break;
}
break;
case 'L':
dir = Math.abs((dir - 1) % 4);
break;
case 'R':
dir = Math.abs((dir + 1) % 4);
break;
}
}
if (x == 0 && y == 0) {
return "YES";
}
return "NO";
}
Modifier
C'est une méthode d'assistance. L'entrée de cette méthode d'assistance est la chaîne d'entrée d'origine concaténée avec trois copies de la chaîne d'entrée d'origine. Par exemple, pour l'entrée "G", "GGGG" sera passé dans cette aide.
Désolé j'ai oublié d'ajouter que j'ai déjà modifié la chaîne d'entrée de sorte que c'est la chaîne d'entrée originale + 3 copies. c'est-à-dire que pour la chaîne d'entrée G, GGGG sera vérifié. Pourquoi la direction finale doit-elle différer de la direction initiale? – fluffychaos
Oui, en cas de chaîne de 4 fois, la direction n'est pas importante. Est-ce que le code '(dir - 1)% 4' fonctionne comme prévu dans votre langue? Si non, remplacez par '(dir +3)% 4' – MBo
Cela l'a corrigé, merci! – fluffychaos