Codility : Supports de Déterminer si une chaîne de parenthèses est correctement imbriquées
La description du problème de codility :
Une chaîne de caractères S constitué de N caractères est considéré comme pour être correctement imbriquées si l'une des conditions suivantes est remplie:
S est vide;
S est de la forme "(U)" ou "[U]" ou "{U}", où U est un correctement imbriquées chaîne;
S est de la forme "VW", où V et W sont correctement imbriquées les chaînes.
Par exemple, la chaîne "{[()()]}" est correctement imbriqués mais "([)()]" ne l'est pas.
Écrire une fonction:
Solution de classe { public int solution(String S); }
que, étant donné une chaîne de caractères S constitué de N caractères, retourne 1 si S est correctement imbriquées et 0 sinon.
Par exemple, étant donné S = "{[()()]}", la fonction doit retourner 1 et S donné = "([)()]", la fonction doit retourner 0, comme expliqué ci-dessus.
Supposons que:
N est un entier compris dans la plage [0..de 200 000];
string S se compose uniquement des caractères suivants: "(", "{", "[", "]", "}" et/ou ")".
Complexité:
attendu au pire-cas du temps de la complexité est O(N);
attendu au pire-cas de l'espace de la complexité est O(N) (sans compter l'espace de stockage requis pour les arguments d'entrée).
- Je obtenir 87% je ne peux pas semblent comprendre le problème.
Voici mon code :
//you can also use imports, for example:
//import java.util.*;
import java.util.Stack;
//you can use System.out.println for debugging purposes, e.g.
//System.out.println("this is a debug message");
class Solution {
public int solution(String s) {
if (s.length() % 2 != 0) {
return 0;
}
Character openingBrace = new Character('{');
Character openingBracket = new Character('[');
Character openingParen = new Character('(');
Stack<Character> openingStack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == openingBrace || c == openingBracket || c == openingParen) {
openingStack.push(c);
} else {
if (i == s.length()-1 && openingStack.size() != 1) {
return 0;
}
if (openingStack.isEmpty()) {
return 0;
}
Character openingCharacter = openingStack.pop();
switch (c) {
case '}':
if (!openingCharacter.equals(openingBrace)) {
return 0;
}
break;
case ']':
if (!openingCharacter.equals(openingBracket)) {
return 0;
}
break;
case ')':
if (!openingCharacter.equals(openingParen)) {
return 0;
}
break;
default:
break;
}
}
}
return 1;
}
}
Je suis horrible entretien des flashbacks de cette question.
Je n'ai pas l'entrée, codiliy ne prévoit pas que. Je ne sais pas ce qu'ils entendent par "negative_match invalide structures"
Vous pouvez faire le test ici codility.com/c/intro/demo7MQR6Q-232
"negative_match" est
))((
OriginalL'auteur klind | 2015-03-09
Vous devez vous connecter pour publier un commentaire.
Votre première condition dans la parenthèse bloc vérifie si votre pile a la taille != 1. Je suppose que c'est là pour vérifier que vous n'avez pas de restes de l'ouverture des crochets, ce qui est une bonne idée. Cependant, vous allez manquer toute cette case si votre dernier char n'est pas une parenthèse fermante/parenthèse/..
Ce, par exemple, ferait échouer pour une entrée comme
(((
.Une solution simple serait de remplacer cette condition par un chèque de après la boucle se termine que la pile est en effet vide.
OriginalL'auteur Leeor
Passé codility test 100/100 en java.
OriginalL'auteur Kundan Kumar
100% JavaScript simple solution
OriginalL'auteur Jung Oh
C'est mon C# solution simple, qui a obtenu 100% de la Justesse et de 100% de la Performance. Le temps de la Complexité est O(N).
https://codility.com/demo/results/trainingRVS3SF-DC6/
OriginalL'auteur Vertigo cache
Je suis à 100% avec la solution suivante en java. Le temps de la complexité est O(N)
}
OriginalL'auteur krishna
Je sais qu'il n'est pas directement liée à votre problème.
Toutefois, j'ai une solution valable avec le moment de l'exécution de la complexité de O(N) et avec l'espace de la complexité de O(1).
Cette solution a obtenu 100/100 à codility.
écrit en c++:
OriginalL'auteur Ephi Frankel
Votre meilleur pari avec ce genre d'erreurs est de s'asseoir et écrit quelques tests unitaires (JUnit est un bon framework) pour vérifier votre compréhension du fonctionnement de l'algorithme.
Dans ce cas, comme Trengot a compris que le "negative_match" entrée
))((
, vous aurez envie au moins de ces cas de test:))((
: C'est votre base de test, une fois que ce passage vous êtes remplit les conditions, et peut déclarer au moins partielle de la victoire.}}{{
: Est-ce une erreur d'ordre général, ou seulement liées à une mauvaise manipulation d'un personnage en particulier?})({
: Est-il lié à la répétition de caractère, ou qu'il ne montre en mixte d'entrée ainsi?(}{)
: Est-ce un bord de cas liés à avoir une ouverture jeton au début de la chaîne, ou ce comportement ne se présentent plus généralement?Une fois que vous comprenez ce que c'est fait faire, au lieu de ce que votre cerveau vous dit qu'il est en train de faire (et de votre cerveau sera vous mentir à ce sujet), la correction devrait être assez simple.
System.out.println(S);return 0;
et qui a été la sortie de ce test.Très astucieux, la solution la plus simple est parfois plus facile de négliger.
Il semble qu'ils générer aléatoirement des cas de test. L'exécutant de nouveau donné
())(()
. Je me demande si c'était la cause de l'OP du problème.OriginalL'auteur Morgen
Donc après Leeor suggestions ici est un 100% solution de
OriginalL'auteur klind
Code: 06:12:11 UTC, c, final score: 100.00
OriginalL'auteur David Yachnis
Voici un Java 100/100:
Voici un lien vers le code. Espérons que cela aide.
OriginalL'auteur moxi
ici vous avez mon 100% de la solution en java:
https://codility.com/demo/results/training2C7U2E-XM3/
OriginalL'auteur Caesar Avgvstvs
@Moxi et @Caesar Avgvstvs reponses inspiré de la mine.
Mais je crois que le mien est plus court, sans manquer de rien.
Ma solution de passer les 100% dans codility . J'ai utilisé une Carte pour éviter la répétition. Voici ma solution en Java.
OriginalL'auteur Raymond Chenon
100% Java
bien sûr, vous avez besoin d'importer java.util:
OriginalL'auteur Dario Sagud
OriginalL'auteur Dmitry Ogurtsov
Ma solution rapide. Devrait fonctionner correctement
OriginalL'auteur Michał Ziobro
Simple solution java, 100/100
OriginalL'auteur Elaina
Ne pouvais pas trouver toutes les scripts python... mais ici il est! Essayé de le garder aussi simple que possible.
OriginalL'auteur TheoreticallyNick
Courts et propres Python solution à ce problème. 100% en Codility
OriginalL'auteur Fran Sandi