写个函数,判断下面扩号是否闭合,左右对称即为闭合: ((())),)(()),(()))),(((((()),(()()),()()

遇到左括号进栈,遇到右括号出栈(如果栈里没有,说明不闭合),遍历到最后元素,判断栈内为空,即为闭合

function checkClose($str)
{
    $stack = [];

    for ($i = 0; $i < strlen($str); ++$i) {
        if ($str[$i] == "(") {
            $stack[] = "(";
        }

        if ($str[$i] == ")") {
            $border = array_pop($stack);

            if(!$border) {
                return false;
            }
        }
    }

    if (count($stack) == 0) {
        return true;
    }
    return false;
}

var_dump(checkClose('(())'));
var_dump(checkClose('(())()(('));
var_dump(checkClose('(())()()'));
var_dump(checkClose('(())()))'));
var_dump(checkClose('(5+2)*6/(3-1)'));
为了判断一个带头结点的循环双链表是否对称,我们可以使用两个指针,一个从头节点开始正向遍历,另一个从尾节点(通常指向头节点的前驱)开始逆向遍历。如果这两个指针在任何时候相遇并且它们指向的节点相等,那么链表是对称的。当其中一个指针到达链表尾部时,如果另一个还在链表内,说明链表不闭合,即不是循环链表;只有当两个指针都停止了,且都在链表内的同一个位置,才是循环对称。 以下是一个 C++ 的示例代码: ```cpp class ListNode { public: int val; ListNode *next, *prev; ListNode(int x) : val(x), next(nullptr), prev(nullptr) {} }; bool isSymmetric(ListNode* head) { if (head == nullptr || head->next == nullptr) { return true; // 非循环单链表或空链表都是对称的 } ListNode* slow = head; ListNode* fast = head->prev; while (fast != nullptr && fast->prev != nullptr) { if (slow != fast || slow->val != fast->val) { return false; // 如果当前节点值不同或者两个指针没有同时到达,则不对称 } slow = slow->next; fast = fast->prev->prev; } return true; // 指针都到达了链表的同一侧,链表对称 } ``` 在这个函数中,`slow` 和 `fast` 分别表示正向和逆向的遍历指针。如果链表有环但不对称,`fast` 将在某个时刻超过 `slow` 或者两者无法相遇,函数会返回 `false`。如果遍历结束且所有节点都匹配,那么链表是对称的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值