Q:丢给你大量的字符串,问里面不重复的字符串有多少
输入
第一行为个数n,之后n行每行一个字符串(1<n<50000)
输出
输出不重复的字符串的个数
输入样例
3
aaaa
AAAa
aaaa
输出样例
2
看到这个题,首先想的是map函数,因为个数大于1的字符串只算一次,所以只用数有几种字符串就好
#include <bits/stdc++.h>
using namespace std;
#define N 100
map <string,int> s;
int main()
{
string ch1[50005];
int n,count=0;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
ch1[i].resize(N); //想用scanf()读入string字符串,必须先分配好内存
scanf("%s",&ch1[i][0]); //scanf()和printf()速度上比cin和cout快很多
s[ch1[i]]++;
}
map<string,int>::iterator ite; //迭代器,作用上类似指针
for(ite =s.begin(); ite!= s.end(); ite++)
{
count++; //查到一个算一种
}
cout<<count;
return 0;
}
马大佬说除了scanf(),还可以加上“ios::sync_with_stdio(false);”可以取消cin与stdin的同步,读入更快,加上后发现效果惊人,比scanf()还要快上一点
但这个题大佬说测试点的数据还是不算多,如果再多点还是解决不了超时问题,正确的思路应该是哈希查找( ̄Д ̄)ノ
未完待续