Questo è un dibattito che stavo avendo con uno dei miei amici: quale sarebbe il modo più veloce di fare un metodo di valenza che controlli se la stringa data ha uno dei non consentiti personaggiAlgo più veloce per cercare set di caratteri in una stringa data
metodo I: semplice
char [] invalidChars = "[email protected]#$%^...".toCharArray();
for (int i = 0; i < myString.length(); i++) {
char ch = myString.charAt(i);
for (int j = 0; j < invalidChars.length; j++) {
if (invalidChars[j] == ch) {
return false;
}
}
}
metodo II: Sfruttando Map O (1)
Map <String,String> map = new HashMap<String, String>();
map.put("!", null);
map.put("@", null);
map.put("#", null);
map.put("$", null);
map.put("^", null);
...
for (int i = 0; i < labels.length(); i++) {
char ch = labels.charAt(i);
if (map.containsKey(ch)) {
return false;
}
return true;
}
Il metodo che è in realtà N2, ma buono come N quando invalidChars sono meno in numero. Cosa dovrebbe essere preferito quando Caso I: ci sono molti caratteri non validi, Caso II: solo pochi caratteri non validi?
Nota: non sto cercando di eventuali soluzioni Java incorporati, ma, appena l'algoritmo per filtrare alcuni (non tutti) i caratteri non di testo
Anche se questa potrebbe essere una soluzione, non è davvero una risposta alla domanda. –
@Roy: Perché non è una risposta? È un "algoritmo" O (1), a causa di alcuni vincoli. –
Mi dispiace, ho letto male, hai ragione, ho messo in votazione il tuo commento. Pensavo volesse solo sapere quale dei due è più veloce. –