Problem Description
Lweb has a string $S$.
Oneday, he decided to
transform this string to a new sequence.
You need help him determine
this transformation to get a sequence which has the longest LIS(Strictly
Increasing).
You need transform every letter in this string to a new
number.
$A$ is the set of letters of $S$, $B$ is the set of natural
numbers.
Every injection $f: A \rightarrow B$ can be treat as an legal
transformation.
For example, a String “aabc”, $A = \{ a,b,c \}$, and you
can transform it to “1 1 2 3”, and the LIS of the new sequence is 3.
Now
help Lweb, find the longest LIS which you can obtain from $S$.
LIS:
Longest Increasing Subsequence.
(https://en.wikipedia.org/wiki/Longest_increasing_subsequence)
Input
The first line of the input contains the only integer
$T, (1 \leq T \leq 20)$.
Then $T$ lines follow, the i-th line contains a
string $S$ only containing the lowercase letters, the length of $S$ will not
exceed $10^5$.
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
代码如下:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include<cmath> 5 6 using namespace std; 7 8 char s[100010]; 9 int w[26]; 10 11 int main() 12 { 13 int t; 14 int d = 0; 15 int sum; 16 scanf("%d",&t); 17 while(t--) 18 { 19 sum = 0; 20 scanf("%s",&s); 21 memset(w,0,sizeof(w)); 22 for (int i=0;i<strlen(s);i++) 23 { 24 if (w[s[i]-‘a‘] == 0){ 25 sum++; 26 w[s[i]-‘a‘] = 1; 27 }else 28 continue; 29 } 30 printf("Case #%d: %d\n",++d,sum); 31 } 32 return 0; 33 }
思路解析:
这题就是题意的问题。A不出来都是被样例迷惑了!样例毁一生2333333,有时候理解真的比直接敲更有用。