剑指offer——字符流中第一个不重复的字符
Posted shengguilv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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 }
代码已在牛客网通过。
以上是关于剑指offer——字符流中第一个不重复的字符的主要内容,如果未能解决你的问题,请参考以下文章