In questo articolo vedremo una possibile soluzione ad un semplice esercizio di programmazione in Javascript.
Data una stringa s contenente solo i caratteri '(', ')', '{', '}', '[' e ']', stabilire se la stringa di input è valida.
Una stringa di input è valida se:
- Le parentesi aperte devono essere chiuse dallo stesso tipo di parentesi.
- Le parentesi aperte devono essere chiuse nell'ordine corretto.
- Ogni parentesi chiusa ha una corrispondente parentesi aperta dello stesso tipo.
Esempio 1:
Input: s = "()"
Output: true
Esempio 2:
Input: s = "()[]{}"
Output: true
Esempio 3:
Input: s = "(]"
Output: false
La stringa di input non deve avere più di 104 caratteri e deve essere costituita solo dalle parentesi '()[]{}'.
Si tratta sostanzialmente di effettuare la scansione della stringa carattere per carattere tenendo traccia del carattere corrente e del carattere immediatamente successivo.
const isValid = (s = '') => {
if(s.length === 0 || s.length > 104) {
return false;
}
const allowedChars = '(){}[]'.split('');
let valid = true;
for(const c of s) {
if(!allowedChars.includes(c)) {
valid = false;
}
}
let i = -1;
const len = s.length;
while(i < len) {
i++;
let ch = s[i];
let next = i < len ? s[i + 1] : null;
if(!next) {
break;
}
switch(ch) {
case '(':
if(next !== ')') {
valid = false;
}
break;
case '{':
if(next !== '}') {
valid = false;
}
break;
case '[':
if(next !== ']') {
valid = false;
}
break;
default:
break;
}
}
return valid;
};