问题描述:
输入:每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出:每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出
法一:
public class zy {
//输入:每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
//输出:每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出
//法1:用库方法contains,对每个字符判断一下
public static void fun(String str) {
StringBuilder stringBuilder=new StringBuilder();
for(int i=0;i<str.length();i++){
char ch=str.charAt(i);
if(!stringBuilder.toString().contains(ch+"")){
//stringBuilder没有contains,但是toString有
//ch是一个字符,contains要的参数是字符串,加一个“”即可变为字符串
stringBuilder.append(ch);//不包含就放进去
}
}
System.out.println(stringBuilder);
//或者你这里设置返回值类型String,return stringBuilder.toString()
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextLine()){
//多组用例输入
String str=scanner.nextLine();
fun(str);
}
}
}
运行结果如下:
法二:
public class zy {
//法二:利用哈希的思想
//由题知只输入大小写字母,a~z对应ASCII码为:97~122,A~Z对应ASCII码为65~90
//创建一个整形数组int[],该数组用于存放每个字母存放的次数,数组对应下标为该字母的ASCII码
//比如abcqweracb中的a
//a对应的ASCII码为97,我们在数组下标97的位置放一个零,
// 当第一次遇见有字符a的时候,0变成1,后续再有a,发现数组里存放的数是1,便不再添加
public static String fun2(String str) {
StringBuilder stringBuilder=new StringBuilder();
int[]arr=new int[127];
//ASCII码所有字符,你要是觉得大,你限制到122也可以,反正题目只输入大小写字母
for(int i=0;i<str.length();i++){
char ch=str.charAt(i);
if(arr[ch]==0){
stringBuilder.append(ch);
arr[ch]=1;
}
}
return stringBuilder.toString();
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextLine()){
//多组用例输入
String str=scanner.nextLine();
String str2=fun2(str);
System.out.println(str2);
}
}
}
运行结果如下: