P10442(洛谷题面

题目

题目描述:

给定字符串 s,ts,t

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

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

输入格式:

第一行一个字符串 ss

第二行一个字符串 tt

输出格式:

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

数据范围与说明:

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

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

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

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

本题采用捆绑测试

n=max(s,t)n=\max(|s|,|t|)

Subtask\text{Subtask} 特殊性质 总分值
11 1010 2525
22 10510^5 A\text{A} 2525
33 10510^5 B\text{B} 2525
44 10510^5 2525

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

特殊性质 A\text{A}ss 是一个 az\text{a}\sim\text{z} 的排列。

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

输入输出样例 #1

输入:

1
2
abc
bc

输出:

1
2

输入输出样例 #2

输入:

1
2
aaaaa
bbbbb

输出:

1
0

题意

简述:

给定字符串 s,ts,t

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

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

代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
using namespace std;

int main() {
string s, t;
cin >> s >> t;
vector<int> count_s(26, 0), count_t(26, 0);

for (char c : s) {
count_s[c - 'a']++;
}

for (char c : t) {
count_t[c - 'a']++;
}

int ans = 0;
for (int i = 0; i < 26; i++) {
ans += min(count_s[i], count_t[i]);
}
cout << ans << endl;

return 0;
}