news 2026/6/12 19:59:33

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 12:28:01

13、AWK与正则表达式:数据处理与文本匹配的强大工具

AWK与正则表达式:数据处理与文本匹配的强大工具 1. AWK命令基础 AWK是一个强大的数据处理工具,可用于从文件中过滤和显示内容,尤其适用于处理大文件。我们可以先打印整个文件,以熟悉命令语法,之后再将控制信息添加到AWK文件中,简化命令行操作。 打印整个文件 :使用以…

作者头像 李华
网站建设 2026/6/10 11:42:58

一文吃透随机森林:原理剖析+C++实战实现

哈喽&#xff0c;各位C开发者朋友&#xff01;今天咱们聚焦机器学习领域中经典的集成学习算法——随机森林。它凭借出色的泛化能力、抗过拟合特性以及对非线性数据的适配性&#xff0c;在分类、回归任务中都有着广泛应用&#xff0c;也是面试中的高频考点。这篇文章会从基础原理…

作者头像 李华
网站建设 2026/6/12 16:35:52

地图着色问题:核心原理与 C++ 代码实现

一、核心问题&#xff1a;一句话秒懂地图着色的核心需求很简单&#xff1a;给地图上的所有区域着色&#xff0c;确保相邻区域&#xff08;有公共边界&#xff0c;非点接触&#xff09;颜色不同&#xff0c;同时使用最少的颜色。关键结论&#xff08;四色定理&#xff09;&#…

作者头像 李华
网站建设 2026/6/11 16:05:08

AI伦理风险与治理体系构建 守护技术向善之路

人工智能的飞速发展在推动社会进步的同时&#xff0c;也催生了一系列伦理风险&#xff0c;数据泄露、算法偏见、责任认定难题等问题逐渐凸显&#xff0c;对社会公平和个体权益构成挑战。如何防范伦理风险&#xff0c;构建科学有效的治理体系&#xff0c;引导AI技术“向善”发展…

作者头像 李华
网站建设 2026/6/11 13:32:51

无须激活,安装即是Pro版!

软件介绍 Wise Care 365是一款专业的Windows系统垃圾清理软件电脑清理工具&#xff0c;软件正版是收费的。 而今天给大家推荐Wise Care 365的两个版本&#xff0c;一个是绿色单文件版本&#xff0c;一个是最新的官方赠品&#xff0c;两版都免费。 第一款&#xff1a;绿色单文…

作者头像 李华
网站建设 2026/6/11 13:41:40

Nginx NIO对比Java NIO

Nginx NIO vs Java NIO一 Nginx NIO1.1 多进程Master进程&#xff1a;管理进程&#xff0c;某个worker进程挂掉&#xff0c;自动重启Worker进程&#xff1a;处理请求&#xff0c;进程之间互相独立&#xff0c;互不影响&#xff0c;建议数量接近CPU核心&#xff0c;减少进程间切…

作者头像 李华