字符流中第一个不重复的字符

原创 2016年08月30日 19:36:50

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

输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。
思路:用哈希表来保存字符在字符流中的位置。用字符的ASCII码作为哈希表的键值,而把字符对应的位置作为哈希表的值。当一个ASCII码为i的字符第一次从字符流中读出时,occurrence[i]的值更新为它在字符流中的位置(index)。遇到重复字符更新值为-2。扫描整个数组,找到最小的大于等于0的值对应的字符。
public class Solution {
    private int[] occurrence = new int[256];
    private int index = 0; 
    
    public Solution(){
	    for(int i=0;i<256;i++){
	    	occurrence[i] = -1;
	    }
    }
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        if(occurrence[ch] == -1){
    		occurrence[ch] = index;
    	}
    	else if(occurrence[ch] >= 0){
    		occurrence[ch] = -2;
    	}
    	index++;
    }
    //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        char ch = '\0';
	int minIndex = Integer.MAX_VALUE;
	for(int i=0;i<256;i++){
		if(occurrence[i] >= 0 && occurrence[i] < minIndex){
			ch = (char)i;
			minIndex = occurrence[i];
		}
	}
	if(ch == '\0'){
		return '#';
	}
	return ch;
    }
}


相关文章推荐

字符流中第一个不重复的字符(哈希表+vecor+剑指offer)

字符流中第一个不重复的字符 参与人数:742时间限制:1秒空间限制:32768K通过比例:25.71%最佳记录:0 ms|8552K(来自  LaZZy) 题目描述 请实...

剑指offer 面试题55 字符流中第一个不重复的字符

剑指offer 面试题55 字符流中第一个不重复的字符 题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符 “go” 时,第一个只出现一...

剑指offer----字符流中第一个不重复的字符----java实现

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一...
  • snow_7
  • snow_7
  • 2016年07月17日 21:17
  • 843

剑指Offer--055-字符流中第一个不重复的字符

链接 牛客OJ:字符流中第一个不重复的字符 九度OJ:未收录 GitHub代码: 055-字符流中第一个不重复的字符 CSDN题解:剑指Offer–055-字符流中第...
  • gatieme
  • gatieme
  • 2016年06月06日 22:38
  • 1213

《剑指offer》:[55]字符流中第一个不重复的字符

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一...
  • gogoky
  • gogoky
  • 2016年06月28日 15:28
  • 1172

字符流中第一个不重复的字符

第一种解法:import java.util.Scanner; import java.util.HashMap; /* * 用HashMap记录字符出现的次数,然后重新遍历一次,算法比较简单,但是...

剑指offer_面试题55_字符流中第一个不重复的字符 *

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

剑指Offer面试题55:字符流中第一个不重复的字符 Java实现

题目:字符流中第一个不重复的字符         请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中读出前两个字符“go”时,第一个只出现一次的字符是“g”.当从该字符流中...

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

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...

55 - 字符流中第一个不重复的字符

当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。当从该字符流中读出前六个字符“google”时,第一个只出现 1 次的字符是”l”。首先要记录一个字符出现的次数,为了实现O(1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符流中第一个不重复的字符
举报原因:
原因补充:

(最多只允许输入30个字)