当前位置: 首页 > 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.jsqmd.com/news/120072/

相关文章:

  • npm2100 超高效升压转换器
  • 我的256天创作纪念日
  • NPM2100 电池电量估算
  • Windows系统文件inetmib1.dll丢失损坏 下载修复方法
  • java计算机毕业设计网络探店 基于大数据的美食探店可视化平台 互联网餐饮探店数据爬取与分析系统
  • 紫金桃源:不止是沈阳新市府纯别墅,更是 N 种生活的生长容器
  • PromQL 核心语法解析
  • Windows系统文件inetcomm.dll丢失损坏 下载修复方法
  • Boost电路的右半平面零点
  • 云底座 amp; 性能优化 90 天每日打卡计划
  • linux centos7.9 中文乱码
  • Tableau入门指南:大数据可视化从零到精通
  • springcloud springboot nacos版本对应 - 指南
  • 智能AI图像识别之建筑物立面缺陷识别 小区违规搭建识别 小区垃圾堆积识别 违规停车识别 建筑物墙面缺陷识别yolo数据集10314期
  • 云底座 amp; 性能优化 90 天提升 工具与学习资源清单
  • java计算机毕业设计网络流行语资源库建设及实现 网络热词共享与语义标注平台 互联网流行语知识图谱与检索系统
  • NPM2100 可控的gpio
  • .NET 文件操作中常见的内存泄漏场景梳理
  • NPM2100 LDO
  • Qt 信号槽机制的一些实现细节
  • 智慧城市与智慧校园之安防暴力检测 校园打架斗殴检测 街边暴力躁动识别 危险物品识别 智能安防 安防领域智能化 数据集第10319期 (1)
  • python题库 No.30 今日何日兮
  • AI Agent的概念形成:模拟LLM的抽象思维过程
  • AI Agent的概念形成:模拟LLM的抽象思维过程
  • 【读书笔记】《中国文化要义》
  • 04 Linux用户和权限管理
  • 云底座 amp; 性能优化 90 天技术提升落地清单
  • 【读书笔记】《苏格拉底的申辩》
  • YOLOv11改进 - C3k2融合 | C3k2融合CBSA 收缩 - 广播自注意力:轻量级设计实现高效特征压缩,优化处理效率 | NeurIPS 2025
  • 鸿蒙破晓:一场技术与人才突围的生态远征