Je fais une question de codility. La question et le code sont ci-dessous. Je passe tous les tests en plus d'un.
Example test: 'F0bar! F0bar!'
WRONG ANSWER (got True expected False)
Quelqu'un sait pourquoi je suis à défaut? Désolé si le format est mauvais.
Un mot de passe sécurisé nécessite au moins 6 caractères, y compris sans espace, au moins 1 majuscules, minuscules 1, 1 chiffre et 1 caractère spécial (! @ # $% ^ & * () _). Ecrire une méthode chaîne donnée S ou longueur N, retourne vrai si S est sécurisé et retourne false si S est pas sécurisé.
import java.util.*;
// Could use regular expression but more confortable with this approach
// Using Character and String built-in java classes
class Solution {
public boolean solution(String S) {
String specialChars = "!@#$%^&*()_";
char character;
boolean isDigit = false;
boolean isLower = false;
boolean isUpper = false;
boolean isSpecialChar = false;
for (int i = 0; i <= S.length(); i++){
character = S.charAt(i);
if (S.length() >= 6 && Character.isDigit(character)){
isDigit = true;
} else if (S.length() >= 6 && Character.isLowerCase(character)){
isLower = true;
} else if (S.length() >= 6 && Character.isUpperCase(character)){
isUpper = true;
} else if (S.length() >= 6 && specialChars.contains(String.valueof(character))){
isSpecialChar = true;
}
}
return isDigit && isLower && isUpper && isSpecialChar;
}
}
Pourquoi êtes-vous constamment vérifier
S.length() >= 6
A l'intérieur d'une boucle?
Il n'y a pas non plus besoin de garder revérifier pour le chiffre Majuscules, etc sur vous trouver. Vous « seulement » besoin de trouver un omble chevalier pour chaque exigence .
Quelque chose comme ça doit faire le travail
static String specialChars = "!@#$%^&*()";
public static boolean solution(String S) {
char currentChar;
boolean hasDigit = false;
boolean hasLower = false;
boolean hasUpper = false;
boolean hasSpecialChar = false;
boolean hasSpace = false;
if(S.length() < 6)
return false;
for (int i = 0; !hasSpace && i < S.length(); i++){
currentChar = S.charAt(i);
if (!hasDigit && Character.isDigit(currentChar))
hasDigit = true;
if(!hasLower && Character.isLowerCase(currentChar))
hasLower = true;
if (!hasUpper && Character.isUpperCase(currentChar))
hasUpper = true;
if(currentChar == ' ')
hasSpace = true;
if(!hasSpecialChar && specialChars.indexOf(currentChar)!=-1)
hasSpecialChar = true;
}
return hasDigit && hasLower && hasUpper && hasSpecialChar && !hasSpace ;
}