题目
题目描述:
给定字符串 s,t。
现在你要在 s,t 中删除一些字符并将它们重新排列使 s=t。
问操作后的 ∣s∣(即字符串 s 的长度)最大是多少?
输入格式:
第一行一个字符串 s。
第二行一个字符串 t。
输出格式:
一行一个整数,表示操作后的 ∣s∣ 的最大值。
数据范围与说明:
在第一个样例中,将 a 删除,留下 bc。
此时 ∣s∣=2,可以证明这是最优解。
在第二个样例中,将 aaaaa 删除,留下空串。
将 bbbbb 删除,留下空串。
此时 ∣s∣=0,可以证明这是最优解。
本题采用捆绑测试。
记 n=max(∣s∣,∣t∣)。
| Subtask |
|
特殊性质 |
总分值 |
| 1 |
10 |
无 |
25 |
| 2 |
105 |
A |
25 |
| 3 |
105 |
B |
25 |
| 4 |
105 |
无 |
25 |
对于 100% 的数据,1≤∣s∣,∣t∣≤105,字符串均由小写字母组成。
特殊性质 A:s 是一个 a∼z 的排列。
特殊性质 B:保证 si,ti∈{a,b}。
输入输出样例 #1
输入:
输出:
输入输出样例 #2
输入:
输出:
题意
简述:
给定字符串 s,t。
现在你要在 s,t 中删除一些字符并将它们重新排列使 s=t。
问操作后的 ∣s∣(即字符串 s 的长度)最大是多少?
代码
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; }
|