剑指offer——字符流中第一个不重复的字符

最后一个字符串类型的题目,原题目链接:字符流中第一个不重复的字符

为了方便直接观看,此处还是先抄一下题目。

题目描述:

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

输出描述:

如果当前字符流没有存在出现一次的字符,返回#字符。

题目分析:

输出只出现一次的字符。首先需要建立一个StringBuffer来接收每次过来的字符。

对于出现的次数,可以建立一个整型数组,使用字符对应的整数作为数组的下标,那么同一个字符在数组中对应的就是同一个位置了;

我们在该位置存放对应字符出现的次数;每来一个字符,便让该位置的数加一。

由于字符最多有255个,所以设置数组的长度为256即可。

最终从头遍历接收的字符,若该字符对应的数组中次数为1,则返回该元素即可

实现代码如下:

 1 public class Solution {
 2     int[] num = new int[256];
 3     StringBuffer buffer = new StringBuffer();
 4     //Insert one char from stringstream
 5     public void Insert(char ch)
 6     {
 7         num[ch]++;
 8         buffer.append(ch);
 9     }
10   //return the first appearence once char in current stringstream
11     public char FirstAppearingOnce()
12     {
13         char[] chs = buffer.toString().toCharArray();
14         for(char ch: chs){
15             if(num[ch] == 1){
16                 return ch;
17             }
18         }
19         return '#';
20     }
21 }

代码已在牛客网通过。

原文地址:https://www.cnblogs.com/shengguilv/p/12983245.html