大家好,我是良辰丫💞!好久不见,一个多月没写博客了,都有些生疏了,学校的一些事情,考试,实训,各种实验,嘿嘿嘿!其实也不能为自己找借口,开启的每天一博客竟然一个月只写了一篇博客,简直是荒唐呀!努力赶上进度,加油。今天我们来刷一个牛客网的字符集合题。链接放到这里了,大家可以去做一下。➡字符集合
🧑个人主页:良辰针不戳
📖所属专栏:EveryDay零基础学java
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💞愿与君为伴,共探Java汪洋大海。
题目描述
输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100 ,且只包含大小写字母,区分大小写。
本题有多组输入
输入描述
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
简要分析
- 一定要读懂题,抓到题目的关键字,不能丢三落四,你写的代码不符合题目要求,那怎么能过呢?
- 只能输入字母,输入大写字母或者小写字母。
- 多组输入。
- 按输入的先后输出。这一点至关重要。比如你输入sdaa,输出结果为sda,而不是ads,不用你按照字母先后顺序排序,没看清题,多此一举的话还需要重新考虑,这就浪费了很多时间。
思路分析
- 第一眼看到这样的题,很多人想到的是暴力求解,嘿嘿嘿,暴力永远的神,你不服,我就用暴力把你打服。确实,暴力能解决绝大多数问题,但是,很多情况下,暴力并不可取,时间复杂度超出预算,编译器都通不过。因此我不建议大家经常使用暴力求解,说白了,暴力求解是绝大多数人都能想到的,经常使用暴力求解很难让一个人进步。
- 举一个简单的例子,从1加到100,从头到尾加肯定能求出结果,用一个公式也能求出结果,而且快了很多,这就是算法。
- 思想是通过不断的做题慢慢培养的,这道题我们需要培养的一个思想就是数组处理相同的元素,遍历一次输入的字符串,然后依次存取到相应位置,数组的坐标就是字符的ASCII值,这样便于处理,当然,如果大家想减少时间复杂度,也可以从0下标开始存取,但是这样容易出错。
//代码如下
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()){
String str = scanner.nextLine();
String ret = func(str);
System.out.println(ret);
}
}
public static String func(String str){
int[] arr = new int[150];
//这里使用StringBuffer,为了使用它的append方法
StringBuffer str2 = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(arr[ch]==0){
arr[ch]=1;
str2.append(ch);
}
}
//类型要一致,StringBuffer转换成String
return str2.toString();
}
运行结果如下图
到了这里还没完呢!上面是按照输入先后顺序输出,下面我们要按照a-z的先后顺序输出。其实也不难,上面的题我们已经排好了序,因为是按照字符的ASCII值当做下标的,我们只需要再遍历一次就行了。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()){
String str = scanner.nextLine();
String ret = func(str);
System.out.println(ret);
}
}
public static String func(String str) {
char[] arr = new char[150];
StringBuffer str2 = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (arr[ch] == 0) {
//细节决定成败,这里不小心把坐标ch写成了i
arr[ch] = ch;
}
}
for (int j = 0; j < arr.length; j++) {
if (arr[j] != 0) {
str2.append(arr[j]);
}
}
return str2.toString();
}
运行结果如下图。
学习了新的知识是不是感到很快乐呢?我是良辰,我们下次再见,期待那么的三连哦!