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

(100分)- 表达式括号匹配(Java JS Python C)

(100分)- 表达式括号匹配(Java & JS & Python & C)

题目描述

(1+(2+3)*(3+(8+0))+1-2)这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。

前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的,

而((())这样的我们就说他是错误的。注意括号里面的表达式可能是错的,也可能有多个空格,对于这些我们是不用去管的,

我们只关心括号是否使用正确。

输入描述

给出一行表达式(长度不超过 100)。

输出描述

如果匹配正确输出括号的对数,否则输出-1。

用例
输入(1+(2+3)*(3+(8+0))+1-2)
输出4
说明
题目解析

本题就是括号匹配的变种题,只是加入了一些干扰字符,我们可以用正则去掉非()的字符,然后利用栈结构校验括号是否成对

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { let count = 0; const stack = []; for (let c of line) { if (c != "(" && c != ")") continue; if (stack.length && c === ")") { if (stack.at(-1) === "(") { stack.pop(); count++; continue; } else { return console.log(-1); } } stack.push(c); } if (stack.length) return console.log(-1); return console.log(count); });
Java算法源码
import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); System.out.println(getResult(s)); } public static int getResult(String s) { int count = 0; LinkedList<Character> stack = new LinkedList<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c != ')' && c != '(') continue; if (stack.size() > 0 && c == ')') { if (stack.getLast() == '(') { stack.removeLast(); count++; continue; } return -1; } stack.add(c); } if (stack.size() > 0) return -1; return count; } }
Python算法源码
# 输入获取 s = input() # 算法入口 def getResult(s): count = 0 stack = [] for c in s: if c != '(' and c != ')': continue if len(stack) > 0 and c == ')': if stack[-1] == '(': stack.pop() count += 1 continue return -1 stack.append(c) if len(stack) > 0: return -1 return count # 算法调用 print(getResult(s))
C算法源码
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef char E; typedef struct ListNode { E ele; struct ListNode *prev; struct ListNode *next; } ListNode; typedef struct { int size; ListNode *head; ListNode *tail; } LinkedList; LinkedList *new_LinkedList(); void addLast_LinkedList(LinkedList *link, E ele); E removeLast_LinkedList(LinkedList *link); E getLast_LinkedList(LinkedList* link); int main() { char s[100]; gets(s); int count = 0; LinkedList *stack = new_LinkedList(); for (int i = 0; i < strlen(s); i++) { if(s[i] != ')' && s[i] != '(') continue; if(stack->size > 0 && s[i] == ')') { if(getLast_LinkedList(stack) == '(') { removeLast_LinkedList(stack); count++; continue; } puts("-1"); return 0; } addLast_LinkedList(stack,s[i]); } if(stack->size > 0) { puts("-1"); } else { printf("%d\n", count); } return 0; } LinkedList *new_LinkedList() { LinkedList *link = (LinkedList *) malloc(sizeof(LinkedList)); link->size = 0; link->head = NULL; link->tail = NULL; return link; } void addLast_LinkedList(LinkedList *link, E ele) { ListNode *node = (ListNode *) malloc(sizeof(ListNode)); node->ele = ele; node->prev = NULL; node->next = NULL; if (link->size == 0) { link->head = node; link->tail = node; } else { link->tail->next = node; node->prev = link->tail; link->tail = node; } link->size++; } E removeLast_LinkedList(LinkedList *link) { if (link->size == 0) exit(-1); ListNode *removed = link->tail; if (link->size == 1) { link->head = NULL; link->tail = NULL; } else { link->tail = link->tail->prev; link->tail->next = NULL; } link->size--; E res = removed->ele; free(removed); return res; } E getLast_LinkedList(LinkedList* link) { if(link->size == 0) exit(-1); return link->tail->ele; }
http://www.cnnetsun.cn/news/174756.html

相关文章:

  • Boost电路的右半平面零点
  • 【全球AI伦理治理】
  • 毕业季必看!7款免费AI写论文神器实测,一站式搞定选题、大纲到降重
  • LLMs之Survey之Agent:《Measuring Agents in Production》翻译与解读
  • 零代码上手Google Gemini 3:5种实用方法大揭秘
  • “你用的那个AI,到底把你坑了还是救了?”——解锁宏智树论文的协作新范式
  • 好写作AI:别等学校采购了!你的论文“救命神器”自己就能用上
  • Windows系统文件GdiPlus.dll丢失或损坏 下载修复方法
  • 研究生必备8款AI写论文神器:5分钟生成25000字问卷类论文,自动生成高信度数据
  • 【BuildFlow 筑流】unitrix_macros库 Cargo.toml 配置详解及依赖库用法
  • 《开发者出海必看:如何优雅地搞定海外服务支付?(保姆级干货)》
  • Thinkphp和Laravel企业防爆安全设备信息系统
  • Thinkphp和Laravel全家桶鲜花售卖商城系统vue
  • 记录我适配iOS26遇到的一些问题
  • 通过命令模拟pod创建
  • 同步机无感 STM32 低成本 MD500E 永磁同步控制方案大揭秘
  • 小宝玩具 【通达信、源码 、主图、附图】
  • 使用 Github Pages 和 Hexo
  • 审稿 一区期刊注意事项: journal offers the option to connec;please note, reviewers are not expected 是什么意思
  • 线性代数:多维世界的变形工具箱
  • 力扣题目142. 环形链表 II​的解法分享,附图解
  • MATLAB电力系统继电保护之自动重合闸
  • 10 个AI写作工具,助你轻松搞定继续教育论文!
  • 【开题答辩全过程】以 基于Vue的茶道知识科普网站的设计与实现为例,包含答辩的问题和答案
  • 主动配电网两阶段鲁棒恢复:Matlab 代码探索之旅
  • ICG-20660L加速度+陀螺仪六轴IMU传感器原理图设计,已量产(加速度传感器)
  • 百度AI架构师亲授:Agentic智能体在医疗领域的落地(附诊断案例)
  • 软件工程期末高频易错点深度剖析:避开这些坑,你就赢了!
  • 打破 AI 创作枷锁!虎贲等考 AI 双效赋能,让学术原创不设限
  • AI 赋能学术演示!虎贲等考 AI PPT,让科研汇报告别 “无效努力”