思路
要在 s s s 与 t t t 相等的情况下使 ∣ s ∣ |s| ∣s∣ 尽可能的大,就只需要保留 s s s 与 t t t 中它们共同拥有的字符(同一个字符有多个也算),而此时, ∣ s ∣ |s| ∣s∣ 的最大值就为 s s s 与 t t t 中每个字符共同拥有的个数,所以只需要计算出 s s s 与 t t t 中每个字符共同拥有的个数即可。
首先,计算出 s s s 与 t t t 中每个字符出现的次数,然后只要累加它们共同拥有的个数——对于一个字符 c c c,若其在 s s s 中出现了 a a a 次,在 t t t 中出现了 b b b 次,那么,对于这个字符,它们共同拥有 min ( a , b ) \min(a,b) min(a,b) 个。
Code
#include<iostream>
using namespace std;
int cnt1[26],cnt2[26];//累计字符个数,记得要清0或定义为全局
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
string s,t;
cin>>s>>t;
for(int i=0;i<s.size();++i) ++cnt1[s[i]-'a'];//统计个数
for(int i=0;i<t.size();++i) ++cnt2[t[i]-'a'];//统计个数
int ans=0;
for(int i=0;i<26;++i) ans+=min(cnt1[i],cnt2[i]);//累加
cout<<ans;
return 0;
}