【题目描述】
小佳佳的英语课外阅读作业。
有一篇文章,共有n行,且每行只包含英文逗号及由大小写英文字母组成的单词,每个单词的字母个数不超过6个,每行至少有一个单词,但不超过200个字符。当我们忽略英文字母的大小写时,小佳佳想知道这篇文章里面含有多少个不同的英文单词。
例如,Word与worD是同一个单词,abcd、bacd、abcde是三个不同的单词。
【输入】
第一行,1个整数n,文章的行数;
接下来n行为文章的具体内容。
【输出】
整篇文章不同单词的个数。
【输入样例】
3
hello
word
Hello
【输出样例】
2
【提示】
输入样例2
3
hello,china
word
Hello
输出样例2
3
【数据范围】
对于60%的数据保证,1≤n≤100,每行只有一个单词,只含有小写英文字母。
对于另外20%的数据保证,1≤n≤200,每行有两个单词,单词之间只有一个逗号。
对于另外20%的数据保证,最多出现50000个单词,如某行有多个单词,单词之间有一个逗号。
【代码】
[C++] 纯文本查看 复制代码 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
int main() {
int n, cnt = 0;
scanf("%d", &n);
map<string, bool> a;
for (int i = 0; i < n; i++) {
int flag = 0;
char sz[205];
scanf("%s", sz);
do {
if (flag != 0) {
sz[flag] = ',';
for (int j = 0; j < strlen(sz) - 1; j++) {
sz[j] = sz[j + flag + 1];
}
flag = 0;
}
for (int j = 0; j < strlen(sz); j++) {
sz[j] = tolower(sz[j]);
if (sz[j] == ',')
sz[j] = '\0', flag = j;
}
if (a.count(sz) == 0) {
a[sz] = true;
cnt++;
}
} while (flag != 0);
}
printf("%d", cnt);
}
|