P10442 「MYOI-R3」字符串

记录19

#include <bits/stdc++.h>
using namespace std;
int main(){
	int a[30]={},b[30]={};
	string s,t;
	int cnt;
	cin>>s>>t;
	for(int i=0;i<s.size();i++) a[s[i]-'a']++;
	for(int i=0;i<t.size();i++) b[t[i]-'a']++;
	for(int i=0;i<26;i++){
		if(a[i]&&b[i]){
			cnt+=min(a[i],b[i]);
		}
	}
	cout<<cnt;
    return 0;
}

突破点

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

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

这里要注意一点是,题目中只说了重新排列,并没有说是一定是顺序排列,所以只要字符相同就行

思路

  1. 统计字符串中每个字符出现的个数
  2. 选取二者中最先的字符数量

代码简析

int a[30]={},b[30]={};

a数组跟b数组分别放两段字符串中出现的字母,字母用下标0~25来一一对应

    for(int i=0;i<s.size();i++) a[s[i]-'a']++;
	for(int i=0;i<t.size();i++) b[t[i]-'a']++;

s[i]-'a't[i]-'a'计算的是下标,用来表示对应的字母

a[s[i]-'a']++;b[t[i]-'a']++;是进行每个字母分别出现的次数

	for(int i=0;i<26;i++){
		if(a[i]&&b[i]){
			cnt+=min(a[i],b[i]);
		}
	}

if(a[i]&&b[i])用来判断二者都出现的字符

cnt用来记录出现字符最小的那个,因为相同字母的情况只能是小的那个

补充

O2 优化详解

1. O2 优化概述

  • 定义:O2 是编译器优化级别的一种,通常用于在编译代码时平衡代码的执行速度和编译时间。它是一种中等优化级别,旨在提高程序的运行效率,同时保持较短的编译时间。

  • 目标:在不显著增加编译时间的情况下,尽可能提高程序的运行速度和效率。

2. O2 优化的特点

  • 中等优化程度:O2 优化介于 O1(低优化)和 O3(高优化)之间。它提供了比 O1 更多的优化,但不会像 O3 那样进行过于激进的优化,从而避免过长的编译时间和可能的性能问题。

  • 平衡性能和编译时间:O2 优化在提高程序性能的同时,尽量减少编译时间,使其适合大多数开发场景。

3. O2 优化的具体内容

  • 代码优化

    • 循环优化:包括循环展开、循环合并等,以减少循环的开销。

    • 常量传播:将常量值传播到程序的各个部分,减少运行时的计算。

    • 死代码消除:移除程序中不会被执行的代码,减少程序体积和运行时间。

    • 函数内联:将一些简单的函数直接嵌入到调用处,减少函数调用的开销。

    • 指令调度:优化指令的执行顺序,提高指令的执行效率。

  • 数据优化

    • 内存分配优化:优化内存分配和释放,减少内存碎片。

    • 数据局部性优化:通过调整数据的存储位置,提高缓存命中率。

    • 数组优化:优化数组的访问和操作,减少访问延迟。

4. O2 优化与 O1、O3 的对比

  • O1 优化

    • 特点:低优化级别,主要进行一些基本的优化,如常量传播、死代码消除等。

    • 优点:编译时间短,适合快速开发和调试。

    • 缺点:优化程度较低,程序性能提升有限。

  • O2 优化

    • 特点:中等优化级别,进行更多的优化,如循环优化、函数内联等。

    • 优点:在不显著增加编译时间的情况下,显著提高程序性能。

    • 缺点:编译时间比 O1 稍长,但优化效果更好。

  • O3 优化

    • 特点:高优化级别,进行非常激进的优化,如循环展开、函数内联等。

    • 优点:程序性能最佳,运行速度最快。

    • 缺点:编译时间长,可能会引入一些复杂的优化,导致程序难以调试。

5. O2 优化的适用场景

  • 开发阶段:在开发过程中,使用 O2 优化可以在较短的编译时间内获得较好的性能,适合频繁编译和调试。

  • 生产环境:对于一些对性能要求较高但对编译时间不太敏感的应用,O2 优化是一个不错的选择。

6. 如何使用 O2 优化

  • GCC 编译器

    • 命令示例gcc -O2 -o output_file source_file.c

    • 说明-O2 是 GCC 编译器中指定 O2 优化级别的选项。

  • Clang 编译器

    • 命令示例clang -O2 -o output_file source_file.c

    • 说明-O2 在 Clang 编译器中同样用于指定 O2 优化级别。

  • 其他编译器:不同的编译器可能有不同的选项来指定 O2 优化级别,具体可以参考编译器的文档。

7. 注意事项

  • 编译时间:虽然 O2 优化的编译时间比 O3 短,但仍然比 O1 长。在开发过程中,可以根据需要选择合适的优化级别。

  • 调试难度:优化后的代码可能会对调试带来一定的困难,因为一些优化可能会改变代码的结构。在调试时,可以暂时关闭优化选项。

  • 性能测试:在使用 O2 优化后,建议进行性能测试,以确保优化后的程序性能符合预期。

8. 总结

O2 优化是一种平衡性能和编译时间的优化方式,适合大多数开发和生产场景。它通过一系列的代码和数据优化,提高程序的运行效率,同时避免了过长的编译时间和复杂的优化问题。在实际开发中,可以根据项目需求和开发阶段选择合适的优化级别。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值