当前位置: 首页 > news >正文

左右括号的最小处理次数

1、题目描述

多多君在处理一个由左结号(和右语号)组成的字符串,多多君每次处理时可以顺序读取一个字符或者一个有效括号子串,求问多多的最小处理次数。


输入描述:

第一行为一个整数N,表示字符串长度(1<=N<=10000),
第二行输入为一个长度为N的字符串,字符串由( 和 )组成


输出描述:

输出一个整数,表示字符串的最小处理次数

补充说明:

有效括号子串需要满足:
1.括号成对闭合,每个"("都有一个对应的")"
2.正确嵌套顺序:右括号不能出现在对应的左括号之前
例如:“()”,“()()”“(()())”均有效括号子串,“)(”, "(()","()())"不是有效括号


实例1:

输入:
4
))))
输出
4
说明
每个字符需要单独处理,需要处理4次


实例2:

输入:
6
((()))
输出:
1
说明
((()))为有效括号子串,需要处理1次
 

 2、解题思路

要解决这个问题,我们需要找到处理给定括号字符串的最小次数。每次处理可以是一个单独的字符或一个有效的括号子串。有效括号子串的定义是成对闭合且正确嵌套的括号序列。

  1. 有效括号子串识别:利用栈来识别有效的括号子串。遍历字符串,遇到左括号时压栈,遇到右括号时弹出栈顶的左括号,并记录有效子串的位置。

  2. 处理次数计算:未被包含在任何有效子串中的字符需要单独处理。有效子串可以一次性处理,因此处理次数等于未被覆盖的字符数加上有效子串的数量。

代码实现

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();String s = scanner.next();System.out.println(minProcessingTimes(s));}public static int minProcessingTimes(String s) {Stack<Integer> stack = new Stack<>();boolean[] matched = new boolean[s.length()];// 标记所有匹配的括号对for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == '(') {  //遇到(就入栈stack.push(i);} else if (!stack.isEmpty()) {  //遇到),且栈不为空,就弹出栈顶元素,并记录有效位置matched[stack.pop()] = true;  //栈顶字符(的位置记为true,且)位置也记为truematched[i] = true;}}int count = 0;int i = 0;while (i < s.length()) {if (matched[i]) {count++; // 处理一个有效子串while (i < s.length() && matched[i]) {i++; // 跳过已匹配的字符}} else {count++; // 处理单个字符i++;}}return count;}

代码解释

  1. 栈的使用:遍历字符串,使用栈来匹配有效的括号对。遇到左括号时压栈,遇到右括号时弹出栈顶的左括号,并标记这两个位置为已匹配。

  2. 处理次数计算:遍历标记数组,连续的已匹配字符视为一个有效子串,只需一次处理;未匹配的字符需要单独处理。

  3. 时间复杂度:O(N),其中N是字符串的长度。每个字符仅被处理一次,栈操作也是线性时间。

http://www.dtcms.com/a/183758.html

相关文章:

  • 深入了解linux系统—— 自定义shell
  • 《智能网联汽车 自动驾驶功能道路试验方法及要求》 GB/T 44719-2024——解读
  • ES常识5:主分词器、子字段分词器
  • Nodejs核心机制
  • 支持selenium的chrome driver更新到136.0.7103.92
  • 【Java EE初阶 --- 多线程(初阶)】线程安全问题
  • 百度AI战略解析:文心一言与自动驾驶的双轮驱动
  • Hibernate 性能优化:告别慢查询,提升数据库访问性能
  • 基于 PostgreSQL 的 ABP vNext + ShardingCore 分库分表实战
  • 使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
  • 红黑树(C++)
  • A1062 PAT甲级JAVA题解 Talent and Virtue
  • 大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等
  • 【C++】内存管理 —— new 和 delete
  • D. Explorer Space(dfs+剪枝)
  • 深入理解深度Q网络DQN:基于python从零实现
  • 三、c语言练习四题
  • 前端项目打包部署流程j
  • 无人机空中物流优化:用 Python 打造高效配送模型
  • 华为IP(6)
  • 中空电机在安装垂直轴高速电机后无法动平衡的原因及解决方案
  • 【网络】:传输层协议 —— UDP、TCP协议
  • Compose笔记(二十二)--NavController
  • 嵌入式硬件篇---SPI
  • 嵌入式硬件篇---陀螺仪|PID
  • 验证码与登录过程逻辑学习总结
  • Go语言——kratos微服务框架使用
  • Linux 进程控制 基础IO
  • 关系数据库-关系运算
  • Docker Compose 的历史和发展