【每日一题】Day5 字符集合

本题来源于牛客网中,链接如下:[编程题]字符集合

1.题目要求

题目展示:

输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100 ,且只包含大小写字母,区分大小写。

本题有多组输入


输入描述:

每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

输出描述:

每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

示例1:

输入
abcqweracb
输出
abcqwer


2.解题思路

【题目解析】:

本道题目是比较简单的,就是输入一段字符串,然后输出一段字符串,输出里面是按顺序的输入字符串,并且没有重复的字母。

【解题思路】:

那么我们要做这道题目,最简单的就是拿另一个字符串来装,没有的字符就放进去,有的就不放。更好的思想我们可以用道Hash的思想。下面我们可以用以下的两种代码去做。


3.参考代码

代码一:

import java.util.ArrayList;
import java.util.Scanner;

public class TestDemo {
	
	//用StringBuilder创建的数组存放返回字符串字符
    public static String func(String str) {
        StringBuilder sb = new StringBuilder();//创建
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);//挨个字符的拿出来
            if (!sb.toString().contains(ch + "")) {
                //对比sb中是否有这个字符
                //有就没事了
                sb.append(ch);//没就放进去
            }
        }
        return sb.toString();
    }


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            //多组输入
            String str = sc.nextLine();//输入字符串
            String str2 = func(str);
            System.out.println(str2);//输出字符串
        }
    }
}

第二种(Hash思想):

import java.util.Scanner;

public class test {
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            while (scanner.hasNext()) {
                String str = scanner.nextLine();
                // 用来标记该字符是否出现过
                char[] flag = new char[256];
                StringBuilder sb = new StringBuilder();
                for(int i = 0; i < str.length(); ++i){
                    char ch = str.charAt(i);
                    // 如果标记是0,说明该字符是第一次出现
                    if(flag[ch] == 0){
                        flag[ch] = 1;
                        sb.append(str.charAt(i));
                    }
                }
                System.out.println(sb);
            }
            scanner.close();
        }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒等于C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值