官方题解|新建文件夹(1)
2024-08-12 00:03:26
发布于:广东
30阅读
0回复
0点赞
题目解析
令 为字符串的最大长度。
如果我们每次都按照题目描述中的的那样去暴力查找统计与 相同的字符串的数量,则总共需要花费 时间,从而导致 (超时)。
我们可以使用 std::map
来存储“到目前为止 出现的次数”( 可以使用 defaultdict(int)
),这样对于每个字符串 可以在 的时间内确定要输出的字符串。
通过这种方法,可以在总共 的时间内解决问题。
语法小课堂
-
std::map<K, V>
可以创建一个具有 映射关系的容器,对于本题中,我们希望给出一个字符串,就能够获取其出现的次数,实际上是要建立一个关于 的映射关系。那么访问时就可以像数组那样使用[]
访问。 -
对于 推荐使用
defaultdict
而非内置的dict
。
defaultdict
会在尝试访问字典中不存在的键
时,给定一个默认值
,例如使用defaultdict(int)
创建字典时,若访问到当前字典中不存在的键
时,就会返回0
,而非直接报错,其行为更接近C++
的std::map
。
AC代码
C++
代码:
#include <bits/stdc++.h>
int main() {
int n;
std::cin >> n;
std::map<std::string, int> cnt;
for (int i = 0; i < n; ++i) {
std::string s;
std::cin >> s;
if (cnt.count(s))
std::cout << s + "(" + std::to_string(cnt[s]) + ")" << '\n';
else
std::cout << s << '\n';
cnt[s] += 1;
}
return 0;
}
Python
代码:
from collections import defaultdict
cnt = defaultdict(int)
for i in range(int(input())):
s = input()
print(f'{s}({cnt[s]})' if s in cnt else s)
cnt[s] += 1
这里空空如也
有帮助,赞一个