随笔 - 173,  文章 - 0,  评论 - 0,  阅读 - 10万
复制代码
<?php
$arrParams = getopt("c:");

$arrCheck = checkParams($arrParams);

if (false === $arrCheck["flag"]) {
    echoMsg($arrCheck);
    exit;
}

$strClose = $arrParams["c"];

$intI = 0;

$arrCnt = array($intI => 0);

$intIsClose = 0;//长度是否闭合 0: 闭合; 1: (过多; -1: )过多;

$intOrder = 0;//闭合括号是否有序闭合 0: 有序闭合; 1: 非有序;

do {
    if (1 === strlen($strClose)) {
        $strCur = $strClose;
    } else {
        $strCur = substr($strClose, 0, 1);
    }

    $strClose = substr($strClose, 1);

    /**
     * 最大闭合长度
     * 与判断是否闭合
     */
    if ($strCur == '(') {
        $arrCnt[$intI] = $arrCnt[$intI] + 1;
        $intIsClose++;

        $intOrder = 1;
    } elseif ($strCur == ')') {
        $intI++;
        $intIsClose--;
        $arrCnt[$intI] = 0;

        $intOrder = 0;
    }

} while (!empty($strClose));

if (0 === $intIsClose
    && 0 === $intOrder
) {
    rsort($arrCnt);
    $intMaxNum = current($arrCnt);
    $arrCheck["msg"] = "是有序闭合括号字符串," . '最大闭合括号数量为: ' . $intMaxNum;
} else {
    $arrOut["flag"] = false;
    if ($intIsClose > 0) {
        $arrCheck["msg"] = "检查字符串 \"(\" 过多";
    } elseif ($intIsClose < 0) {
        $arrCheck["msg"] = "检查字符串 \")\" 过多";
    } else {
        $arrCheck["msg"] = "可能存在 \")(\" 请检查字符串";
    }
}

echoMsg($arrCheck);


/**
 * 检查入参
 */
function checkParams($arrParams = array())
{
    $arrOut = array(
        "flag"     => false,
        "msg"    => "",
    );
    if (empty($arrParams["c"])) {
        $arrOut["msg"] = "闭合字符串不得为空";
        return $arrOut;
    }

    if (0 !== strpos($arrParams["c"], "(")) {
        $arrOut["msg"] = "非闭合括号字符串";
        return $arrOut;
    }

    if (false === strpos($arrParams["c"], ")")) {
        $arrOut["msg"] = "非闭合括号字符串2";
        return $arrOut;
    }


    $arrOut["flag"] = true;

    return $arrOut;
}

/**
 * 输出函数
 */
function echoMsg($arrCheck = array())
{
    $strPre = $arrCheck["flag"] === true? "SUCCESS": "ERR";
    echo $strPre . ": " . $arrCheck["msg"];
    echo "\n";
    exit;
}
复制代码
复制代码
test admin$ php close.php -c "()"
SUCCESS: 是有序闭合括号字符串,最大闭合括号数量为: 1
test root$ php close.php -c "((()))"
SUCCESS: 是有序闭合括号字符串,最大闭合括号数量为: 3
test admin$ php close.php -c "((()))"
SUCCESS: 是有序闭合括号字符串,最大闭合括号数量为: 3
test root$ php close.php -c "((()))("
SUCCESS: 检查字符串 "(" 过多
test admin$ php close.php -c "((())))"
SUCCESS: 检查字符串 ")" 过多
test root$ php close.php -c "((())))("
SUCCESS: 可能存在 ")(" 请检查字符串
复制代码

 

posted on   黑熊一只  阅读(264)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示