【Day2】零基础学java--》牛客网刷题【字符集合】

news/2024/10/20 9:29:02/

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

🧑个人主页:良辰针不戳
📖所属专栏: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();}

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


http://www.ppmy.cn/news/2724.html

相关文章

MySQL基础知识

一、数据库相关的简单命令 1、显示数据库 show databases&#xff1b; 2、创建数据库 create database 数据库名 character set 字符集 collate 指定字符集的校验规则&#xff1b; 注意&#xff1a; 数据库名应尽量避免使用关键字&#xff0c;如必须使用则需添加(倒引号);未…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK11特性讲解】

JDK各个版本特性讲解-JDK11特性 lecture&#xff1a;波哥 一、JAVA11 概述 2018年9月26日,Oracle官方发布JAVA11.这是JAVA大版本周期变化后的第一个长期支持版本,非常值得关注.最新发布的JAVA11将带来ZGC HttpClient等重要特性,一共17个需要我们关注的JEP,参考文档http://openj…

多线程之线程同步(互斥锁、信号量、条件变量和读写锁​)

前言 多线程编程的时候经常会发生公共资源被抢夺而造成问题。 通常将“多个线程同时访问某一公共资源”的现象称为“线程间产生了资源竞争”或者“线程间抢夺公共资源”,线程间竞争资源往往会导致程序的运行结果出现异常,感到匪夷所思,严重时还会导致程序运行崩溃。 幸运地…

如何撰写数据分析报告?

Step1&#xff1a;目标确定 这一步在工作中通常是由你的客户/上级/其他部门同事/合作方提出来的 第一次的数据报告需要自己来提出并确定目标&#xff0c;选择目标时&#xff0c;需要注意的点&#xff1a; 选择一个比较熟悉&#xff0c;或者比较感兴趣的领域/行业 选择一个范…

基于物联网的小区物业集成化管理APP

目录 一.简介 二.功能简介 1.电梯控制——上下班人流高峰期监控 2.信息公开——以物业管理费为例 3.意见反馈 4.信息查询 5.云上摆摊——社区电商/线下购物 6.家政服务 7.线下活动 8.物业账单、缴费、推送 9.访客出入申请 10.快递收发 还有其他很多功能...... 三…

如此简单的时间复杂度计算方法:大O渐进法,你确定不进来康康

对于时间复杂度&#xff0c;空间复杂度&#xff0c;想必这个是大家在学习数据结构的初级阶段就会第一步认识的吧&#xff01;&#xff01;但是&#xff0c;对于复杂度的计算&#xff0c;涉及到了大O渐进法&#xff0c;这个方法是一个笼统的概念&#xff0c;所求得的结果&#x…

设计模式之工厂方法模式

factory method design pattern 工厂方法模式的概念、工厂方法模式的结构、工厂方法模式的优缺点、工厂方法模式的使用场景、工厂方法模式的实现示例、工厂方法模式的源码分析 1、工厂方法的概念 工厂方法模式&#xff0c;及简单工厂模式的升级版&#xff0c;其抽象了对象的创…

基于jsp+java+ssm考研指导平台-计算机毕业设计

项目介绍 本考研学习类的网站&#xff0c;采用了ssm框架技术和mysql数据库进行网站设计研发&#xff0c;系统具有前台展示&#xff0c;后台管理的设计模式&#xff0c;是一款典型的计算机毕业设计学习资料。前台主要展示了考研相关的资讯&#xff0c;方便用户在线注册并且留言…