krot

валидатор скобок

Sep 12th, 2020 (edited)
1,259
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?
  2. $str='(2*3*y)(/(4*6+x)';
  3. var_dump(is_valid($str));
  4.  
  5.  
  6. function is_valid($str){
  7. $bal=0;
  8. for($i=0,$size=strlen($str);$i<$size;++$i){
  9.     if($str[$i]=='(')
  10.         $bal++;
  11.     elseif($str[$i]==')')$bal--;
  12.     if($bal<0)return false;
  13. }
  14. return ($bal==0);
  15. }
  16. //генератор скобок
  17. $n=2;//длина
  18. $m=2;
  19. $a=array();
  20. $out=array();
  21.  
  22.  
  23. rec(0,0);
  24. print_r($out);
  25.  
  26. function out(){
  27.     global $a,$n,$out;
  28.     $tmp='';
  29.     for($i=0;$i<2*$n;++$i){
  30.         $tmp.=$a[$i];
  31.     }
  32.     $out[]=$tmp;
  33. }
  34. function rec($inx,$bal){
  35.     global $a,$m,$n,$used;
  36.     if($inx==2*$n){
  37.         if($bal==0){
  38.         out();
  39.         }
  40.         return;
  41.     }
  42.         $a[$inx]='(';
  43.    
  44.         rec($inx+1,$bal+1);
  45.        
  46.         if($bal==0) return;
  47.        
  48.         $a[$inx]=')';
  49.        
  50.         rec($inx+1,$bal-1);
  51.          
  52.  
  53. }
RAW Paste Data