字符集和

一、题目描述

输入一个字符串,求出该字符串包含的字符集合
输入描述

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

输出描述:

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

牛客网题目链接

二、解题思路

         要将字符串中的重复字母去掉,且不改变字符顺序,一种很自然的想法就是散列。建立整型数组(考虑到大小写,长度得52;另外设置一顺序变量),遍历字符串,如果遇到数组中没有出现的字母,将它出现的顺序写在数组中。最后遍历数组输出。这样做有些麻烦。所以,可以建立一个set,在遍历字符串时,判断是否需要插入set,若要插入就说明该字母第一次出现,将其记录下来(StringBuild或者其他存储都行)。另外一种方法是,建立一个StringBilder对象,在循环遍历字符串的时候判断字符是否包含在StringBuilder对象中,如果有就不添加,否则加入。

三、代码

         下面是后两种思路的代码:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            // 将输入的字符串转换为字符数组
            char[] c = in.next().toCharArray();
            StringBuffer sb = new StringBuffer();

            Set<Character> set = new HashSet<Character>();
            for (int i = 0; i < c.length; i++) {
                if (set.add(c[i])) {
                    sb.append(c[i]);
                }
            }
            System.out.println(sb.toString());
        }
    }
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        //char[] chars = string.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < string.length(); i++) {
            char temp = string.charAt(i);
            if (!stringBuilder.toString().contains(temp + "")) {
                    stringBuilder.append(temp);
            }
        }

        System.out.println(stringBuilder);
    }
}

发布了65 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44002167/article/details/105076994