小O有一个字符串 s ,她希望重新排列这个字符串,并改变字符的大小写,使得新的字符串包含尽可能多的字符串 a 或者字符串 b 。请问小O最多能包含多少个子串 a 和子串 b 。 如果字符串 t 可以通过从字符串 s 的开头删除若干(可能为零或全部)字符以及从结尾删除若干(可能为零或全部)字符得到,则字符串 t 是字符串 s 的子串。
第一行输入一个字符串 s ,仅包含小写字母。 第二行输入一个字符串 a ,首字母大写,其余小写。 第三行输入一个字符串 b ,首字母大写,其余小写。 除此之外,保证 1 ≤ |s|, |a|, |b| ≤ 10^5 ,即保证每个字符串至多由 10^5 个字符构成。
在一行上输出一个正整数,表示最多能包含多少个子串 a 和子串 b 。
abcdefg Abc Fge
2
考点:字符串 · 贪心
限制 1 秒 / 256MB | 标准输入输出
推荐方向:贪心
每一步都取当前最优,靠问题性质保证局部最优能拼成全局最优。
思路框架(贪心 通法 · 非本题专属)
实现要点:贪心题关键在于排序规则:按什么关键字排序决定了策略是否正确。
复杂度:时间 O(n log n)(含排序) | 空间 O(1) ~ O(n)
该范式的通法易错点
对照本题
样例 1:输入 abcdefg / Abc / Fge → 输出 2
将字符串修改成 AbcdFge,包含两个子串 Abc 和 Fge。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2024年秋招-OPPO-AI/算法岗笔试。