求仅出现一次的最早字符

Posted Confesser

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求仅出现一次的最早字符相关的知识,希望对你有一定的参考价值。

题目

请实现一个函数用来找出字符流中第一个只出现一次的字符。

例如输入google,输出l

代码

 1     private static Set<Character> filter = new HashSet<>();
 2     private static LinkedList<Character> result = new LinkedList<>();
 3 
 4     private static void getFirstChar(String string) {
 5         char[] chars = string.toCharArray();
 6         for (Character ch : chars) {
 7             if (!filter.contains(ch)) {
 8                 int cIndex = result.indexOf(ch);//避免使用contains底层遍历多次
 9                 if (cIndex == -1) {
10                     result.add(ch);
11                 } else {
12                     result.remove(cIndex);//复用
13                     filter.add(ch);
14                 }
15             }
16         }
17         System.out.println(result.size() == 0 ? "#" : result.getFirst());
18     }

 

上述是我写的代码,后来发现一个学弟写的更好,来贴一下,大家围观~~

 1     public static void findChar(String string) {
 2         char[] chars = new char[256];//所有字符--256,同时此处用char不用Int是为了减少空间
 3         for (int i = 0; i < string.length(); i++) {
 4             chars[string.charAt(i)]++;
 5         }
 6         for (int i = 0; i < string.length(); i++) {
 7             if (chars[string.charAt(i)] == 1) {
 8                 System.out.println(string.charAt(i));
 9                 break;
10             }
11             if (chars[string.charAt(i)] != 1 && i == string.length() - 1) {
12                 System.out.println("#");
13             }
14         }
15     }

 

以上是关于求仅出现一次的最早字符的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 260 只出现一次的数字(超详细)

最强解析面试题:第一个只出现一次的字符

最强解析面试题:第一个只出现一次的字符

34.第一次值出现一次的字符

剑指Offer-第一个只出现一次的字符位置

剑指Offer--第50题 第一次只出现一次的字符