【Day2】零基础学java--》牛客网刷题【字符集合】
创始人
2024-04-19 18:21:37
0

大家好,我是良辰丫💞!好久不见,一个多月没写博客了,都有些生疏了,学校的一些事情,考试,实训,各种实验,嘿嘿嘿!其实也不能为自己找借口,开启的每天一博客竟然一个月只写了一篇博客,简直是荒唐呀!努力赶上进度,加油。今天我们来刷一个牛客网的字符集合题。链接放到这里了,大家可以去做一下。➡字符集合

🧑个人主页:良辰针不戳
📖所属专栏: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转换成Stringreturn 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写成了iarr[ch] = ch;}}for (int j = 0; j < arr.length; j++) {if (arr[j] != 0) {str2.append(arr[j]);}}return str2.toString();}

运行结果如下图。
在这里插入图片描述
学习了新的知识是不是感到很快乐呢?我是良辰,我们下次再见,期待那么的三连哦!

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...