《刷题笔记》牛客网 字符集合(一刷)
1.题目分析:
本题有多组输入,题目的意思为我们需要输出原来的字符串的顺序但是只要后续有重复出现的字母就不再打印了,注意要打印回车
2. 思路分析
我们需要理解的是,每一个字母出现了一次打印后就不再打印,所以,我们可以对这个字母的Assci码值进行标记,如果为0,则是没出现过,为1,则是出现过。
创建一个int类型的数组来进行标记功能。
思路比较简单,但是容易迷茫
用到的:哈希思想,字符串相关库函数。
3. 代码:
import java.util.*;
public class Main{
public static String func(String str){
int[] array = new int[127]; //标记功能的数组
char[] chars = new char[100];
StringBuilder strl = new StringBuilder(); //为了修改字符串,使用StringBuilder
for(int i = 0;i<str.length();i++){
chars[i] = str.charAt(i); //得到每个字母
if(array[chars[i]]==0){
chars[i] = str.charAt(i);
strl.append(chars[i]);
array[chars[i]]=1;
}
}
return strl.toString();
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
String str = scan.nextLine();
String ret = func(str);
System.out.println(ret);
}
}
}
运行结果:
总结
粗心的点:
理解错了题意,以为需要按字母顺序打印
不会的:
没有想到StringBuilder来做为一个变量去返回String 的值。而是传统意义的使用字符数组来打印,没有这个巧妙。