PHP: validare il bilanciamento delle parentesi
In PHP possiamo validare il bilanciamento delle parentesi.
Una coppia di parentesi è bilanciata se alla parentesi di apertura segue la corrispondente parentesi di chiusura. Possiamo implementare la seguente soluzione.
function is_valid($s = '') {
if(empty($s)) {
return false;
}
$allowed_chars = ['(', ')', '{', '}', '[', ']'];
$valid = true;
$len = strlen($s);
for($i = 0; $i < $len; $i++) {
if(!in_array($s[$i], $allowed_chars)) {
$valid = false;
}
}
$j = 0;
while($j < $len) {
$ch = $s[$j];
$next_i = $j + 1;
$next = $next_i < $len ? $s[$next_i] : null;
if(is_null($next)) {
break;
}
switch($ch) {
case '(':
if($next !== ')') {
$valid = false;
}
break;
case '{':
if($next !== '}') {
$valid = false;
}
break;
case '[':
if($next !== ']') {
$valid = false;
}
break;
default:
break;
}
$j++;
}
return $valid;
}
Esempio d'uso:
$examples = ['()', '()[]{}', '(]'];
foreach($examples as $e) {
var_dump(is_valid($e));
}