题目传送门
思路:
这道题目要求我们计算给定的N个字符串中有多少个不同的字符串。为了高效地解决这个问题,我们可以使用哈希表来存储和去重字符串。
- 读取输入:首先读取输入的整数N,表示字符串的个数。
- 读取字符串:接着读取N行字符串。
- 使用集合去重:将每个字符串添加到一个集合中,集合会自动去重。
- 输出结果:最后输出集合的大小,即不同字符串的个数。
代码&解释:
c++代码:
#include<iostream>
#include<istream>
#include<ostream>
#include<string>
#include<algorithm>
#include<bitset>
#include<cmath>
#include<queue>
#include<map>
#include<iomanip>
using namespace std;
map<string,bool>ma;
int n,ans;
int main(){
cin>>n;
ans = 0;
for(int i = 1;i <= n;i++){
string str;
cin>>str;
if(ma[str] == 1) continue;
else ans++,ma[str] = 1;
}
cout<<ans;
return 0;
}
代码解释:
-
全局变量:
map<string,bool>ma; int n,ans;
ma
:一个map
数据结构,用于存储字符串及其对应的布尔值(表示该字符串是否已经出现过)。n
:整数,表示字符串的个数。ans
:整数,用于计数不同的字符串个数。
-
主函数:
int main(){ cin>>n;
- 读取输入的整数
n
,表示字符串的个数。
- 读取输入的整数
-
初始化计数器:
ans = 0;
- 初始化计数器
ans
为0。
- 初始化计数器
-
循环读取字符串:
for(int i = 1;i <= n;i++){ string str; cin>>str;
- 使用
for
循环读取n
个字符串,每次读取一个字符串并存储在str
中。
- 使用
-
检查字符串是否已存在:
if(ma[str] == 1) continue;
检查
ma
中是否已经存在该字符串,如果存在则跳过当前循环。 -
更新计数器和映射:
else ans++,ma[str] = 1;
- 如果字符串不存在于
ma
中,则将计数器ans
加1,并在ma
中标记该字符串为已存在。
- 如果字符串不存在于
-
输出结果:
cout<<ans; return 0; }
- 输出不同字符串的个数
ans
,并返回0表示程序正常结束。
- 输出不同字符串的个数
Python代码:
# 读取输入的整数N
N = int(input())
# 使用集合来存储不同的字符串
unique_strings = set()
# 读取N行字符串并添加到集合中
for _ in range(N):
string = input().strip()
unique_strings.add(string)
# 输出不同字符串的个数
print(len(unique_strings))
代码解释:
- 读取N:使用
int(input())
读取整数N。 - 初始化集合:
unique_strings = set()
创建一个空的集合用于存储不同的字符串。 - 循环读取字符串:使用
for _ in range(N)
循环N次,每次读取一个字符串并使用input().strip()
去除可能的空白字符,然后将其添加到集合中。 - 输出结果:使用
print(len(unique_strings))
输出集合的大小,即不同字符串的个数。