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→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≤T≤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 105 . 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 Author UESTC Source 2016中国大学生程序设计竞赛 - 网络选拔赛
这道题一开始把我引向最长上升子序列。。汗
结果斌不需要,因为a不一定映射成1,a也可以映射成2,3,4...但是一个单词对应的数字是唯一的
所以只需要统计一共有多少个不同的字母就能知道最长上升子序列的长度
AC代码:
import java.io.*; import java.util.*; public class Main { static String cur; public static void main(String[] args) { Scanner sc=new Scanner(System.in); Set<Character> set=new HashSet<Character>(); int n=sc.nextInt(); for(int i=1;i<=n;i++) { set.clear(); cur=sc.next(); for(int k=0;k<cur.length();k++) { set.add(cur.charAt(k)); } System.out.print("Case #"+i+": "); System.out.println(set.size()); } } }