博客
关于我
51Nod 1791 合法括号子段
阅读量:413 次
发布时间:2019-03-06

本文共 1521 字,大约阅读时间需要 5 分钟。

给定一串括号串,对于其中每个左括号‘(’最多只能找到一个与之相匹配的右括号‘)’。我们可以用栈算法找出每个括号的匹配位置,存储在数组pos中。pos[i]表示第i个左括号对应的右括号的位置,初始值为-1,表示没有匹配的右括号。接下来,我们需要计算以每个括号为开头的合法括号序列的数量,存储在ans数组中。

状态转移方程为ans[i] = ans[pos[i] + 1] + 1,其中i != -1。ans[i]表示以第i个括号开头的合法括号序列的数量。最终答案是所有ans[i]的总和。

解题步骤

  • 初始化:创建pos数组,初始值均为-1。创建ans数组,初始值均为0。

  • 栈匹配括号:使用栈遍历括号字符串,记录每个左括号对应的右括号位置到pos数组中。

  • 计算ans数组:从字符串末尾向前遍历,根据pos数组更新ans数组的值。

  • 求总和:将ans数组中的所有值求和,得到最终答案。

  • 代码实现

    #include 
    #include
    using namespace std;int main() { char s[n]; int t; stack
    S; for (scanf("%d", &t); t--; ) { scanf("%s", s); int len = strlen(s); fill(pos, pos + len, -1); fill(ans, ans + len, 0); while (!S.empty()) { int i = S.top(); S.pop(); if (s[i] == ')') { for (int j = 0; j < len; ++j) { if (s[j] == '(' && pos[j] == -1) { pos[j] = i; break; } } } } int sum = 0; for (int i = len - 1; i >= 0; --i) { if (pos[i] != -1) { ans[i] = ans[pos[i] + 1] + 1; sum += ans[i]; } } cout << sum << '\n'; } return 0;}

    代码解释

  • 初始化:使用fill函数初始化pos和ans数组,pos初始值为-1,ans初始值为0。

  • 栈匹配括号:遍历字符串,使用栈记录左括号的位置。当遇到右括号时,弹出栈顶的左括号位置,并将其记录到pos数组中。

  • 计算ans数组:从字符串末尾向前遍历,计算每个左括号对应的合法括号序列数量。ans[i] = ans[pos[i] + 1] + 1,表示以i为起点的括号序列数等于其后续可能的括号数加上空的情况。

  • 求总和:将ans数组中的所有值求和,得到最终答案,并输出。

  • 通过这种方法,可以高效地计算出每个左括号开头的合法括号序列数量,并求出总和,解决问题。

    转载地址:http://rkokz.baihongyu.com/

    你可能感兴趣的文章
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-random节点来实现随机数在折线图中显示
    查看>>
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Node.js 8 中的 util.promisify的详解
    查看>>
    Node.js 函数是什么样的?
    查看>>
    Node.js 历史
    查看>>
    Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
    查看>>
    Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
    查看>>
    node.js 怎么新建一个站点端口
    查看>>
    Node.js 文件系统的各种用法和常见场景
    查看>>
    node.js 简易聊天室
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>