多组括号闭包问题

问题描述:判断字符串中的括号 () [] {} 是否为闭合结构。

最开始的思路是,使用堆栈的结构,遇到左括号加入堆栈头,遇到匹配的右括号则将左括号移除堆栈,最后若堆栈有剩余或过程中匹配失败,则括号结构不为闭包。

function validBraces($braces){
  $array = [];
  foreach(str_split($braces) as $item) {
    if($item == '(' || $item == '[' || $item == '{') {
      array_unshift($array,$item);
    } elseif(($array[0] == '(' && $item == ')') || ($array[0] == '[' && $item == ']') || ($array[0] == '{' && $item == '}')) {
      array_shift($array);
    } else {
      return false;
    }
  }
  return empty($array) ? true : false;
}

提交之后,虽然是勉勉强强能够完成任务,但是看了大佬们的代码后,真是感到自惭形愧。

//1、str_replace能这么智能地使用我是没想到的。。。
function validBraces($braces){
  do {
    $braces = str_replace(['()', '[]', '{}'], '', $braces, $count);
  } while ($count);
  return empty($braces);  
}
//或者
function validBraces($braces){
    $count = 1;
    while ($count) $braces = str_replace(['()', '[]', '{}'], '', $braces, $count);
    return $braces === '';
}
2、使用正则,
function validBraces($s) {
  $s = preg_replace('/[^(){}\[\]]/', "", $s);
  while (preg_match('/\(\)|\[\]|\{\}/', $s)) {
    $s = preg_replace('/\(\)|\[\]|\{\}/', "", $s);
  }
  return !$s;
}

另外,如果你有兴趣,或者是有问题想要与我探讨,欢迎来访问我的博客:https:mu-mu.cn/blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值