news 2026/6/15 18:12:36

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:59:27

智能AI图像识别之建筑物立面缺陷识别 小区违规搭建识别 小区垃圾堆积识别 违规停车识别 建筑物墙面缺陷识别yolo数据集10314期

数据集说明本数据集为计算机视觉领域目标检测任务提供支持&#xff0c;以下从核心信息表格与数据三要素概述两方面展开说明。 类别14 类别&#xff08;14&#xff09;1_受损建筑立面 2_不存在/破损/堵塞的门 3_破损/无防护的窗户 4 入口处无无障碍设施 5_缺乏体育活动空间 破损…

作者头像 李华
网站建设 2026/6/14 19:36:42

java计算机毕业设计网络流行语资源库建设及实现 网络热词共享与语义标注平台 互联网流行语知识图谱与检索系统

计算机毕业设计网络流行语资源库建设及实现f3fk69 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。网络热词三天一迭代&#xff0c;传统人工收集、Excel 归档的方式早已追不上“造…

作者头像 李华
网站建设 2026/6/15 12:28:07

Tableau入门指南:大数据可视化从零到精通

Tableau入门指南:大数据可视化从零到精通 关键词:Tableau、数据可视化、大数据分析、仪表盘、数据故事 摘要:本文是为零基础读者设计的Tableau入门指南,通过“奶茶店经营分析”的真实场景,用通俗易懂的语言讲解Tableau的核心概念(数据源、维度/度量、可视化图表、仪表盘、…

作者头像 李华
网站建设 2026/6/13 4:47:28

【人工智能AI安全与对齐】

人工智能AI安全与对齐案例分析 AI安全与对齐的核心在于确保AI系统的行为符合设计者的意图&#xff0c;避免意外或有害后果。以下是几个典型案例分析&#xff1a; 案例1&#xff1a;OpenAI的GPT-3内容过滤 OpenAI在GPT-3中部署了内容过滤机制&#xff0c;通过规则和机器学习模…

作者头像 李华
网站建设 2026/6/14 18:31:35

【读书笔记】《中国文化要义》

梁漱溟《中国文化要义》导读&#xff1a;我们到底是谁&#xff1f;中国文化的特点是什么&#xff1f; 一、梁漱溟其人&#xff1a;最后一个儒家&#xff0c;知行合一的实践者 梁漱溟是20世纪中国最具特色的哲学家与思想家之一。他不同于一般书斋学者&#xff0c;一生极具实践精…

作者头像 李华