2026/3/22 18:46:43
网站建设
项目流程
站长工具果冻传媒,烟台百度网站排名,google广告,学手机网站建设【LetMeFly】3606.优惠券校验器#xff1a;分类 排序
力扣题目链接#xff1a;https://leetcode.cn/problems/coupon-code-validator/
给你三个长度为 n 的数组#xff0c;分别描述 n 个优惠券的属性#xff1a;code、businessLine 和 isActive。其中#xff0c;第 i 个…【LetMeFly】3606.优惠券校验器分类 排序力扣题目链接https://leetcode.cn/problems/coupon-code-validator/给你三个长度为n的数组分别描述n个优惠券的属性code、businessLine和isActive。其中第i个优惠券具有以下属性code[i]一个字符串表示优惠券的标识符。businessLine[i]一个字符串表示优惠券所属的业务类别。isActive[i]一个布尔值表示优惠券是否当前有效。当以下所有条件都满足时优惠券被认为是有效的code[i]不能为空并且仅由字母数字字符a-z、A-Z、0-9和下划线_组成。businessLine[i]必须是以下四个类别之一electronics、grocery、pharmacy、restaurant。isActive[i]为true。返回所有有效优惠券的标识符组成的数组按照以下规则排序先按照其businessLine的顺序排序electronics、grocery、pharmacy、restaurant。在每个类别内再按照标识符的字典序升序排序。示例 1输入code [SAVE20,,PHARMA5,SAVE20], 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.length1 n 1000 code[i].length, businessLine[i].length 100code[i]和businessLine[i]由可打印的 ASCII 字符组成。isActive[i]的值为true或false。解题方法分组 排序分组/分类似乎差不多暂不深究。使用4个数组分别存放合法的4类优惠券。最后对4个数组分别按字符串字典序排序合并为一个数组并返回。如何判断一个优惠券是否合法active为truebusinessLine属于4类之一code不为空且只由数组字母下划线组成注意C中合并vector时若被合并vector后续无需再使用则可以使用make_move_iterator在内存上移动。时间复杂度O ( L log n ) O(L\log n)O(Llogn)其中L LL是合法code总字符数空间复杂度CO ( L ) O(L)O(L)AC代码C/* * LastEditTime: 2025-12-13 22:42:29 */classSolution{private:inlineboolis_ok(strings){for(charc:s){if(c!_!isalnum(c)){returnfalse;}}return!s.empty();}public:vectorstringvalidateCoupons(vectorstringcode,vectorstringbusinessLine,vectorboolisActive){vectorstringelectronics,grocery,pharmacy,restaurant;for(inti0;icode.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());vectorstringans;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和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源