csp信奥赛C++高频考点专项训练之字符串 --【字符统计】:「MYOI-R3」字符串

csp信奥赛C++高频考点专项训练之字符串 --【字符统计】:「MYOI-R3」字符串

题目描述

给定字符串 s , t s,t s,t。

现在你要在 s , t s,t s,t 中删除一些字符并将它们重新排列使 s = t s=t s=t。

问操作后的 ∣ s ∣ |s| ∣s∣(即字符串 s s s 的长度)最大是多少?

输入格式

第一行一个字符串 s s s。

第二行一个字符串 t t t。

输出格式

一行一个整数,表示操作后的 ∣ s ∣ |s| ∣s∣ 的最大值。

输入输出样例 1
输入 1
复制代码
abc
bc
输出 1
复制代码
2
输入输出样例 2
输入 2
复制代码
aaaaa
bbbbb
输出 2
复制代码
0
说明/提示

在第一个样例中,将 a 删除,留下 bc。

此时 ∣ s ∣ = 2 |s|=2 ∣s∣=2,可以证明这是最优解。

在第二个样例中,将 aaaaa 删除,留下空串。

将 bbbbb 删除,留下空串。

此时 ∣ s ∣ = 0 |s|=0 ∣s∣=0,可以证明这是最优解。

本题采用捆绑测试。

记 n = max ⁡ ( ∣ s ∣ , ∣ t ∣ ) n=\max(|s|,|t|) n=max(∣s∣,∣t∣)。

Subtask \text{Subtask} Subtask n\\le 特殊性质 总分值
1 1 1 10 10 10 无 25 25 25
2 2 2 10 5 10^5 105 A \text{A} A 25 25 25
3 3 3 10 5 10^5 105 B \text{B} B 25 25 25
4 4 4 10 5 10^5 105 无 25 25 25

对于 100 % 100\% 100% 的数据, 1 ≤ ∣ s ∣ , ∣ t ∣ ≤ 10 5 1 \le |s|,|t| \le 10^5 1≤∣s∣,∣t∣≤105,字符串均由小写字母组成。

特殊性质 A \text{A} A: s s s 是一个 a ∼ z \text{a}\sim\text{z} a∼z 的排列。

特殊性质 B \text{B} B:保证 s i , t i ∈ { a , b } s_i,t_i\in\{\text{a},\text{b} \} si,ti∈{a,b}。

思路分析

题目要求:删除两个字符串中的部分字符,并重新排列剩下的字符,使得两个字符串相等。由于可以任意重排,最终字符串的字符组成只取决于两个字符串中字符出现的频数。对于每个字符,能保留的最大数量就是两个字符串中该字符出现次数的最小值。因此,答案等于所有字符的 min(cnt_s[ch], cnt_t[ch]) 之和。

实现步骤:

  1. 读入字符串 s 和 t。
  2. 用两个长度为 26 的数组 a 和 b 分别统计 s 和 t 中每个字母出现的次数。
  3. 遍历 26 个字母,累加 min(a[i], b[i]) 到答案。
  4. 输出答案。

时间复杂度 O(|s|+|t|),空间 O(1)。

代码实现

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

string s,t;//两个输入字符串
int a[26];//桶a:统计s中每个字母出现次数
int b[26];//桶b:统计t中每个字母出现次数
int ans=0;//最终能得到的字符串长度

int main(){
    cin>>s>>t;//读入字符串
    //统计s中每个字母的出现次数
    for(int i=0;i<s.size();i++){
        a[s[i]-'a']++;//将字符转换为0~25的下标并累加
    }
    //统计t中每个字母的出现次数
    for(int i=0;i<t.size();i++){
        b[t[i]-'a']++;
    }
    //累加每个字母的最小出现次数
    for(int i=0;i<26;i++){
        ans+=min(a[i],b[i]);//取较小值并累加
    }
    cout<<ans;//输出结果
    return 0;
}

功能分析

  • 输入处理 :从标准输入读取两个字符串 s 和 t。
  • 频数统计 :使用两个整型数组 a 和 b 分别记录 s 和 t 中每个小写字母('a'~'z')出现的次数。通过 字符 - 'a' 将字符映射到数组下标。
  • 答案计算 :遍历 26 个字母,将两个数组对应位置的最小值累加到 ans。
  • 输出结果 :打印 ans,即操作后字符串的最大可能长度。

该算法正确解决了问题,时间复杂度 O(|s|+|t|),空间复杂度 O(1),满足题目数据范围(|s|,|t| ≤ 10^5),可通过所有测试点。


【完整系列请查看专栏】:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转


各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++提高组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
扶尔魔ocy1 小时前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
akinggw2 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
東隅已逝,桑榆非晚3 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
eggwyw4 小时前
C++相交链表和反转链表详解
开发语言·c++
杜 硕4 小时前
从零开始的C++生活——第六讲——02
c++·算法·生活
小超人诞生日记4 小时前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂4 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
小贾要学习4 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
A7bert7775 小时前
【MobileSAM部署至RK3588】环境适配→转换RKNN→开发板部署
c++·人工智能·深度学习·目标检测·ubuntu