字符集合
输入一个字符串,求出该字符串包含的字符集合
输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
输入例子:
abcqweracb
输出例子:
abcqwer
解题
标记法时间复杂度太差了,可以用HashMap增加了空间复杂度
我的标记法
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.next(); char[] chars = str.toCharArray(); for(int i = 0;i<chars.length;i++){ for(int j =i+1;j< chars.length;j++){ if(chars[i]!='+' && chars[i] == chars[j]){ chars[j] = '+'; } } } String res =""; for(int i =0;i<chars.length ;i++){ if(chars[i] != '+'){ res += chars[i]+""; } } String res2 = String.valueOf(chars); //System.out.println(res); System.out.println( res2.replaceAll("[+]","") ); } } }
这样标记是比较好的
import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.next(); int[] A = new int[256]; for(int i = 0;i< str.length() ;i++){ char ch = str.charAt(i); A[ch]++; } String res=""; for(int i = 0;i< str.length();i++){ char ch = str.charAt(i); if(A[ch]!=0){ res+=ch; A[ch] = 0; } } System.out.println(res); } } }