一、题目描述
输入一个字符串,求出该字符串包含的字符集合
输入描述
每组数据输入一个字符串,字符串最大长度为100,且仅包含字母,不可能为空串,区别大小写。
输出描述:
每组数据一行,按串联前缀的字符顺序,输出字符集,即重复出现并靠后的字母不输出。
二、解题思路
要将字符串中的重复字母去掉,且不改变字符顺序,一种很自然的想法就是散列。建立整型数组(考虑到大小写,长度得52;另外设置一顺序变量),遍历字符串,如果遇到数组中没有出现的字母,将它出现的顺序写在数组中。最后遍历数组输出。这样做有些麻烦。所以,可以建立一个set,在遍历字符串时,判断是否需要插入set,若要插入就说明该字母第一次出现,将其记录下来(StringBuild或者其他存储都行)。另外一种方法是,建立一个StringBilder对象,在循环遍历字符串的时候判断字符是否包含在StringBuilder对象中,如果有就不添加,否则加入。
三、代码
下面是后两种思路的代码:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
// 将输入的字符串转换为字符数组
char[] c = in.next().toCharArray();
StringBuffer sb = new StringBuffer();
Set<Character> set = new HashSet<Character>();
for (int i = 0; i < c.length; i++) {
if (set.add(c[i])) {
sb.append(c[i]);
}
}
System.out.println(sb.toString());
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
//char[] chars = string.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char temp = string.charAt(i);
if (!stringBuilder.toString().contains(temp + "")) {
stringBuilder.append(temp);
}
}
System.out.println(stringBuilder);
}
}