LeetCode 1520. 最多的不重叠子字符串(贪心)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个只包含小写字母的字符串 s ,你需要找到 s 中最多数目的非空子字符串,满足如下条件:
- 这些字符串之间互不重叠,也就是说对于任意两个子字符串 s[i…j] 和 s[k…l] ,要么 j < k 要么 i > l 。
- 如果一个子字符串包含字符 char ,那么 s 中所有 char 字符都应该在这个子字符串中。
请你找到满足上述条件的最多子字符串数目。如果有多个解法有相同的子字符串数目,请返回这些子字符串总长度最小的一个解。可以证明最小总长度解是唯一的。
请注意,你可以以 任意 顺序返回最优解的子字符串。
示例 1:
输入:s = "adefaddaccc"
输出:["e","f","ccc"]
解释:下面为所有满足第二个条件的子字符串:
["adefaddaccc""adefadda","ef","e","f","ccc",
]
如果我们选择第一个字符串,那么我们无法再选择其他任何字符串,所以答案为 1 。
如果我们选择 "adefadda" ,剩下子字符串中我们只可以选择 "ccc" ,
它是唯一不重叠的子字符串,所以答案为 2 。
同时我们可以发现,选择 "ef" 不是最优的,因为它可以被拆分成 2 个子字符串。
所以最优解是选择 ["e","f","ccc"] ,答案为 3 。
不存在别的相同数目子字符串解。示例 2:
输入:s = "abbaccd"
输出:["d","bb","cc"]
解释:注意到解 ["d","abba","cc"] 答案也为 3 ,但它不是最优解,因为它的总长度更长。提示:
1 <= s.length <= 10^5
s 只包含小写英文字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-number-of-non-overlapping-substrings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 参考大佬的思路
class Solution {public:vector<string> maxNumOfSubstrings(string s) {vector<int> start(26,-1), end(26,-1);int i = 0, n = s.size(), l, r, last = -1;for(i = 0; i < n; ++i){char ch = s[i];if(start[ch-'a'] == -1)start[ch-'a'] = i;end[ch-'a'] = i;}vector<int> endpos;for(auto e : end)if(e != -1)endpos.push_back(e);sort(endpos.begin(), endpos.end());vector<string> ans;for(auto e : endpos){l = start[s[e]-'a'];r = e;while(l < r){if(end[s[r]-'a'] > e || l <= last)break;l = min(l, start[s[r]-'a']);r--;}if(r == l){ans.push_back(s.substr(l, e-l+1));last = e;}}return ans;}
};
184 ms 20 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1520. 最多的不重叠子字符串(贪心)相关推荐
- leetcode算法题--最多的不重叠子字符串★★
原题链接:https://leetcode-cn.com/problems/maximum-number-of-non-overlapping-substrings/ 贪心算法: 找出26个字符为首尾 ...
- Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
730. 统计不同回文子字符串 给定一个字符串 S,找出 S 中不同的非空回文子序列个数,并返回该数字与 10^9 + 7 的模. 通过从 S 中删除 0 个或多个字符来获得子字符序列. 如果一个字符 ...
- 来自北大算法课的Leetcode题解:459. 重复的子字符串
代码仓库:Github | Leetcode solutions @doubleZ0108 from Peking University. 解法1(T92% S72%):因为我们并不知道这个被重复的子 ...
- LeetCode简单题之作为子字符串出现在单词中的字符串数目
题目 给你一个字符串数组 patterns 和一个字符串 word ,统计 patterns 中有多少个字符串是 word 的子字符串.返回字符串数目. 子字符串 是字符串中的一个连续字符序列. 示例 ...
- LeetCode简单题之长度为三且各字符不同的子字符串
题目 如果一个字符串不含有任何重复字符,我们称这个字符串为 好 字符串. 给你一个字符串 s ,请你返回 s 中长度为 3 的 好子字符串 的数量. 注意,如果相同的好子字符串出现多次,每一次都应该被 ...
- LeetCode简单题之最长的美好子字符串
题目 当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串.比方说,"abABB" 是美好字符串,因为 'A' 和 'a' ...
- js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!
不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...
- LeetCode 2062. 统计字符串中的元音子字符串
文章目录 1. 题目 2. 解题 1. 题目 子字符串 是字符串中的一个连续(非空)的字符序列. 元音子字符串 是 仅 由元音('a'.'e'.'i'.'o' 和 'u')组成的一个子字符串,且必须包 ...
- LeetCode 5843. 作为子字符串出现在单词中的字符串数目
文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串数组 patterns 和一个字符串 word ,统计 patterns 中有多少个字符串是 word 的子字符串. 返回字符串数目. 子字 ...
最新文章
- Ubuntu用命令行发邮件mutt,报警发短信通知
- docker commit 命令
- Java中的Memento设计模式-示例教程
- python同步两张数据表_Python 如何实现数据库表结构同步
- redis入门——服务器篇
- 去掉日志服务器性能,日志服务器及性能监控
- 求1--100的和 Python3实现
- 求字符串的最小正周期
- 浮动网页html特效代码,网页上可点击关闭的纯代码无图版浮动tips提示特效代码...
- 在线定时任务表达式生成连接
- 生物信息学: 导论与方法 | 总结笔记
- Knowledge graph, Freebase, Wikidata三大知识图谱
- 计算机之父—— 约翰·冯·诺依曼
- Google推出GDrive免费云存储服务
- nginx如何自定义日志记录格式?
- AOS | 推出无线充电发射器(TX)解决方案
- linux系统裁剪扩充原理,Linux入门之系统内核原理之初级系统裁剪----“我的系统我做主”...
- python中什么叫类、什么叫对象_Python中的类和对象是什么
- R329开发板根目录 ls 命令文件和文件名乱码其他目录不乱码问题解决
- Python可以做哪些神奇好玩的事情?
热门文章
- 金属磁记忆传感器封装
- 【分享】 codeReview 的重要性
- Django-安装xadmin的方法及主要配置方法
- Django 部署基础【使用 Nginx + uWSGI 的方式来部署来 Django】
- LInux:shell 命令:字符串截取
- 全国计算机vb考试经典程序设计,全国计算机二级《VB语言程序设计》考试要点...
- 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...
- Linux视频 pad,Wine 1.9.10 发布下载, 改善视频输出
- create-react-app 创建react项目 多页面应用
- 每周分享之cookie详解