JavaScript: risolvere un semplice esercizio di programmazione

JavaScript: risolvere un semplice esercizio di programmazione

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:

  1. Le parentesi aperte devono essere chiuse dallo stesso tipo di parentesi.
  2. Le parentesi aperte devono essere chiuse nell'ordine corretto.
  3. 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;
};   
Torna su