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

LeetCode 3606.优惠券校验器:分类 + 排序

【LetMeFly】3606.优惠券校验器:分类 + 排序

力扣题目链接:https://leetcode.cn/problems/coupon-code-validator/

给你三个长度为n的数组,分别描述n个优惠券的属性:codebusinessLineisActive。其中,第i个优惠券具有以下属性:

  • code[i]:一个字符串,表示优惠券的标识符。
  • businessLine[i]:一个字符串,表示优惠券所属的业务类别。
  • isActive[i]:一个布尔值,表示优惠券是否当前有效。

当以下所有条件都满足时,优惠券被认为是有效的

  1. code[i]不能为空,并且仅由字母数字字符(a-z、A-Z、0-9)和下划线(_)组成。
  2. businessLine[i]必须是以下四个类别之一:"electronics""grocery""pharmacy""restaurant"
  3. isActive[i]true

返回所有有效优惠券的标识符组成的数组,按照以下规则排序:

  • 先按照其businessLine的顺序排序:"electronics""grocery""pharmacy""restaurant"
  • 在每个类别内,再按照标识符的字典序(升序)排序。

示例 1:

输入:code = ["SAVE20","","PHARMA5","SAVE@20"], businessLine = ["restaurant","grocery","pharmacy","restaurant"], isActive = [true,true,true,true]

输出:["PHARMA5","SAVE20"]

解释:

  • 第一个优惠券有效。
  • 第二个优惠券的标识符为空(无效)。
  • 第三个优惠券有效。
  • 第四个优惠券的标识符包含特殊字符@(无效)。

示例 2:

输入:code = ["GROCERY15","ELECTRONICS_50","DISCOUNT10"], businessLine = ["grocery","electronics","invalid"], isActive = [false,true,true]

输出:["ELECTRONICS_50"]

解释:

  • 第一个优惠券无效,因为它未激活。
  • 第二个优惠券有效。
  • 第三个优惠券无效,因为其业务类别无效。

提示:

  • n == code.length == businessLine.length == isActive.length
  • 1 <= n <= 100
  • 0 <= code[i].length, businessLine[i].length <= 100
  • code[i]businessLine[i]由可打印的 ASCII 字符组成。
  • isActive[i]的值为truefalse

解题方法:分组 + 排序

分组/分类似乎差不多,暂不深究。

使用4个数组,分别存放合法的4类优惠券。最后对4个数组分别按字符串字典序排序,合并为一个数组并返回。

如何判断一个优惠券是否合法?

  1. active为true
  2. businessLine属于4类之一
  3. code不为空且只由数组字母下划线组成

注意,C++中合并vector时若被合并vector后续无需再使用,则可以使用make_move_iterator在内存上移动。

  • 时间复杂度O ( L log ⁡ n ) O(L\log n)O(Llogn),其中L LL是合法code总字符数
  • 空间复杂度:C++O ( L ) O(L)O(L)

AC代码

C++
/* * @LastEditTime: 2025-12-13 22:42:29 */classSolution{private:inlineboolis_ok(string&s){for(charc:s){if(c!='_'&&!isalnum(c)){returnfalse;}}return!s.empty();}public:vector<string>validateCoupons(vector<string>&code,vector<string>&businessLine,vector<bool>&isActive){vector<string>electronics,grocery,pharmacy,restaurant;for(inti=0;i<code.size();i++){if(!isActive[i]){continue;}if(!is_ok(code[i])){continue;}if(businessLine[i]=="electronics"){electronics.push_back(code[i]);}elseif(businessLine[i]=="grocery"){grocery.push_back(code[i]);}elseif(businessLine[i]=="pharmacy"){pharmacy.push_back(code[i]);}elseif(businessLine[i]=="restaurant"){restaurant.push_back(code[i]);}}sort(electronics.begin(),electronics.end());sort(grocery.begin(),grocery.end());sort(pharmacy.begin(),pharmacy.end());sort(restaurant.begin(),restaurant.end());vector<string>ans;ans.reserve(electronics.size()+grocery.size()+pharmacy.size()+restaurant.size());ans.insert(ans.end(),make_move_iterator(electronics.begin()),make_move_iterator(electronics.end()));ans.insert(ans.end(),make_move_iterator(grocery.begin()),make_move_iterator(grocery.end()));ans.insert(ans.end(),make_move_iterator(pharmacy.begin()),make_move_iterator(pharmacy.end()));ans.insert(ans.end(),make_move_iterator(restaurant.begin()),make_move_iterator(restaurant.end()));returnans;}};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.cnnetsun.cn/news/43147.html

相关文章:

  • 【面板数据】全球稀土贸易数据(2018-2024年)
  • 【后端】【Java】一文详解Spring Boot 统一日志与链路追踪实践
  • 无需运动恢复结构(SfM)的层级训练三维高斯溅射(3D Gaussian Splatting)
  • CS配合CrossC2插件,实现MacOS/Linux上线
  • 4、Puppet 入门:从基础使用到主从架构搭建
  • 线性代数(五)向量空间与子空间
  • matlab debug 调试程序
  • VibeVoice-Large-Q8:语音模型存储与性能的革命性突破——8位选择性量化技术深度解析
  • 腾讯开源双引擎AI模型:混元3D开创多模态创作新纪元,千倍效率革命重塑数字内容生产
  • Csharp学习笔记——常用类、集合框架、泛型、字典精华总结
  • 下载神器downkyi:5分钟掌握任务优先级管理技巧
  • 63.测试策略-领域模型测试集成测试实操方法-附测试框架选择
  • 1.2 主流大模型初探:解锁OpenAI、Gemini、Claude的强大能力
  • Ring-mini-linear-2.0:融合线性注意力与稀疏专家的下一代高效大语言模型
  • MFC消息处理机制
  • 商业级图像合成引擎6.0版本重磅发布:解锁跨场景视觉创作新范式
  • MyBatis-Plus与Spring整合(02--Service的代理)
  • 11、渗透测试实战:目标探索、利用与攻击行动
  • 16、攻击收尾:报告与撤离
  • 20、树莓派的替代项目探索
  • 事件查看器-事件ID
  • 单步出图革命:Consistency Model如何以100倍效率重构AI绘画产业格局
  • 搭建鸿蒙PC命令行适配环境测试hello程序
  • 编辑相似度(Edit Similarity):原理、演进与多模态扩展
  • 【深度解析】MiniCPM 2.0:端侧大模型的技术性进展与技术革新
  • ClickHouse 快速入门
  • 基于SpringBoot的人事管理系统设计与实现
  • 【论文阅读】Multi-modal Spatial Clustering for Spatial Transcriptomics Utilizing High-resolution Histology
  • Day36官方文档的阅读
  • Windows右键菜单终极优化指南:让你的右键菜单重获新生