本题来源于牛客网中,链接如下:[编程题]字符集合
1.题目要求
题目展示:
输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100 ,且只包含大小写字母,区分大小写。
本题有多组输入
输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
示例1:
输入
abcqweracb
输出
abcqwer
2.解题思路
【题目解析】:
本道题目是比较简单的,就是输入一段字符串,然后输出一段字符串,输出里面是按顺序的输入字符串,并且没有重复的字母。
【解题思路】:
那么我们要做这道题目,最简单的就是拿另一个字符串来装,没有的字符就放进去,有的就不放。更好的思想我们可以用道Hash的思想。下面我们可以用以下的两种代码去做。
3.参考代码
代码一:
import java.util.ArrayList;
import java.util.Scanner;
public class TestDemo {
//用StringBuilder创建的数组存放返回字符串字符
public static String func(String str) {
StringBuilder sb = new StringBuilder();//创建
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);//挨个字符的拿出来
if (!sb.toString().contains(ch + "")) {
//对比sb中是否有这个字符
//有就没事了
sb.append(ch);//没就放进去
}
}
return sb.toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
//多组输入
String str = sc.nextLine();//输入字符串
String str2 = func(str);
System.out.println(str2);//输出字符串
}
}
}
第二种(Hash思想):
import java.util.Scanner;
public class test {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String str = scanner.nextLine();
// 用来标记该字符是否出现过
char[] flag = new char[256];
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length(); ++i){
char ch = str.charAt(i);
// 如果标记是0,说明该字符是第一次出现
if(flag[ch] == 0){
flag[ch] = 1;
sb.append(str.charAt(i));
}
}
System.out.println(sb);
}
scanner.close();
}
}