Description
Output
For each test case, output a single line "Case #x: y", where x is the case number, starting from 1. And y is the answer.
Sample Input
2 aabcc acdeaa
Sample Output
Case #1: 3 Case #2: 4
题意:
这个题目是说,任选一个从26个字母的集合到整数的集合的映射,然后求每一行的字符数组对应的数列的最长递增子序列的长度的最大值。
如果你以为我要说的是动态规划,那你就傻了。
因为映射可以任选,所以这个题目的意思是,输入一个字符串(只有小写字母),输出它有多少个不同的小写字母。
对,没错,就是这样,没了。
代码:#include<iostream>
//Lweb and String HDU - 5842
using namespace std;
int main()
{
int T;//1<=T<=20
cin >> T;
int numCase = 0;
//char pstring[100000];
while (T--)
{
int maxsum = 0;
char a;
int pchar[26] = { 0 };
cin >> a;//获取非换行
//a = getchar();
while (a != '\n')//可以是do...while循环
{
a = getchar();//获取所有的
pchar[a - 'a']++;
}
//while (cin >> a) //pchar[a - 'a']++;
for (int i = 0; i < 26; i++)
{
maxsum = pchar[i] > 0 ? maxsum + 1 : maxsum + 0;
}
cout << "Case #" << ++numCase << ": " << maxsum << endl;
}
return 0;
}
大神代码:
#include<iostream> #include<cstring> using namespace std; char c[100001]; int l[26]; int main() { int t; scanf("%d", &t); for (int cas = 1; cas <= t; cas++) { scanf("%s", c); int len = strlen(c); for (int i = 0; i < 26; i++)l[i] = 0; for (int i = 0; i < len; i++)l[c[i] - 'a']++; int sum = 0; for (int i = 0; i < 26; i++)sum += (l[i]>0); printf("Case #%d: %d\n", cas, sum); } return 0; }