news 2026/6/9 22:40:17

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/8 7:34:16

23、PHP编程与相关技术全解析

PHP编程与相关技术全解析 1. PHP基础操作与数据获取 在PHP编程中,对于日志条目的操作是一个常见场景。首先,会将日志条目的ID号存储在 $id 变量中。接着,会进行条件判断,如果存在ID号且该ID号大于0,程序会执行一系列操作。具体步骤如下: 1. 连接到服务器。 2. 选择…

作者头像 李华
网站建设 2026/6/9 17:23:09

46、使用容器更新和管理 SQL Server:全面指南

使用容器更新和管理 SQL Server:全面指南 1. 使用容器更新 SQL Server 在 RHEL 上更新 Linux 版 SQL Server 到新的累积更新时,通常会运行 sudo yum update mssql-server 命令。此命令会下载最新累积更新,关闭 SQL Server,应用新二进制文件,然后重新启动 SQL Server。…

作者头像 李华
网站建设 2026/6/9 1:19:03

k8s-应用部署和组件及常用命令(2)

、相关组件介绍&#xff1a;node是k8s的集群节点&#xff0c;和实际的机器对应pod是应用容器&#xff0c;不同的应用部署在不同的pod中&#xff0c;k8s协调资源&#xff0c;将pod部署到集群中的node节点上&#xff08;非master节点&#xff09;。同时pod又是挂在namespace下面的…

作者头像 李华
网站建设 2026/6/9 17:22:55

【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发

深入理解 Spring Boot RESTful 风格接口开发一、什么是 RESTful&#xff1f;RESTful 是一种基于 REST&#xff08;Representational State Transfer&#xff0c;表述性状态转移&#xff09; 架构风格的 Web 接口设计规范。在 RESTful 风格中&#xff1a;一切皆资源通过 URL 表示…

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

52、Samba与分布式文件系统(DFS)全解析

Samba与分布式文件系统(DFS)全解析 1. Samba连接与文件操作 Samba是一种强大的工具,可让Linux服务器与Windows网络集成。我们可以尝试连接之前创建的共享(samba - share),以clientB主机为例,使用smbclient工具连接到serverA上的共享。 - 连接共享 :使用 smbclien…

作者头像 李华