文章目录

  • 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. 最多的不重叠子字符串(贪心)相关推荐

  1. leetcode算法题--最多的不重叠子字符串★★

    原题链接:https://leetcode-cn.com/problems/maximum-number-of-non-overlapping-substrings/ 贪心算法: 找出26个字符为首尾 ...

  2. Java实现 LeetCode 730 统计不同回文子字符串(动态规划)

    730. 统计不同回文子字符串 给定一个字符串 S,找出 S 中不同的非空回文子序列个数,并返回该数字与 10^9 + 7 的模. 通过从 S 中删除 0 个或多个字符来获得子字符序列. 如果一个字符 ...

  3. 来自北大算法课的Leetcode题解:459. 重复的子字符串

    代码仓库:Github | Leetcode solutions @doubleZ0108 from Peking University. 解法1(T92% S72%):因为我们并不知道这个被重复的子 ...

  4. LeetCode简单题之作为子字符串出现在单词中的字符串数目

    题目 给你一个字符串数组 patterns 和一个字符串 word ,统计 patterns 中有多少个字符串是 word 的子字符串.返回字符串数目. 子字符串 是字符串中的一个连续字符序列. 示例 ...

  5. LeetCode简单题之长度为三且各字符不同的子字符串

    题目 如果一个字符串不含有任何重复字符,我们称这个字符串为 好 字符串. 给你一个字符串 s ,请你返回 s 中长度为 3 的 好子字符串 的数量. 注意,如果相同的好子字符串出现多次,每一次都应该被 ...

  6. LeetCode简单题之最长的美好子字符串

    题目 当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串.比方说,"abABB" 是美好字符串,因为 'A' 和 'a' ...

  7. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!

    不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  8. LeetCode 2062. 统计字符串中的元音子字符串

    文章目录 1. 题目 2. 解题 1. 题目 子字符串 是字符串中的一个连续(非空)的字符序列. 元音子字符串 是 仅 由元音('a'.'e'.'i'.'o' 和 'u')组成的一个子字符串,且必须包 ...

  9. LeetCode 5843. 作为子字符串出现在单词中的字符串数目

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串数组 patterns 和一个字符串 word ,统计 patterns 中有多少个字符串是 word 的子字符串. 返回字符串数目. 子字 ...

最新文章

  1. Ubuntu用命令行发邮件mutt,报警发短信通知
  2. docker commit 命令
  3. Java中的Memento设计模式-示例教程
  4. python同步两张数据表_Python 如何实现数据库表结构同步
  5. redis入门——服务器篇
  6. 去掉日志服务器性能,日志服务器及性能监控
  7. 求1--100的和 Python3实现
  8. 求字符串的最小正周期
  9. 浮动网页html特效代码,网页上可点击关闭的纯代码无图版浮动tips提示特效代码...
  10. 在线定时任务表达式生成连接
  11. 生物信息学: 导论与方法 | 总结笔记
  12. Knowledge graph, Freebase, Wikidata三大知识图谱
  13. 计算机之父—— 约翰·冯·诺依曼
  14. Google推出GDrive免费云存储服务
  15. nginx如何自定义日志记录格式?
  16. AOS | 推出无线充电发射器(TX)解决方案
  17. linux系统裁剪扩充原理,Linux入门之系统内核原理之初级系统裁剪----“我的系统我做主”...
  18. python中什么叫类、什么叫对象_Python中的类和对象是什么
  19. R329开发板根目录 ls 命令文件和文件名乱码其他目录不乱码问题解决
  20. Python可以做哪些神奇好玩的事情?

热门文章

  1. 金属磁记忆传感器封装
  2. 【分享】 codeReview 的重要性
  3. Django-安装xadmin的方法及主要配置方法
  4. Django 部署基础【使用 Nginx + uWSGI 的方式来部署来 Django】
  5. LInux:shell 命令:字符串截取
  6. 全国计算机vb考试经典程序设计,全国计算机二级《VB语言程序设计》考试要点...
  7. 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...
  8. Linux视频 pad,Wine 1.9.10 发布下载, 改善视频输出
  9. create-react-app 创建react项目 多页面应用
  10. 每周分享之cookie详解