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

原创 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;
    }
}


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

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

经典算法——字符流中第一个不重复的字符

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

剑指offer(C++)——字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出...
  • YF_Li123
  • YF_Li123
  • 2017年04月18日 10:28
  • 240

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

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

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

题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从字符流中读出字符"google"时,第一个只出现一次...
  • xiaominkong123
  • xiaominkong123
  • 2016年05月23日 20:20
  • 158

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

题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出...
  • zengzhen_CSDN
  • zengzhen_CSDN
  • 2016年03月12日 17:32
  • 420

【算法】字符串中找出第一个不重复的字符

思想: 1、采用两个int整数,firstHappen整数记录字符对应ascii码对应位,如果出现则为1,不出现默认为0; 2、reHappen整数记录字符对应ascii码对应位,如果重复出现的为1,...
  • gesanghuazgy
  • gesanghuazgy
  • 2015年09月27日 09:27
  • 1559

在一个字符串中查找第一个非重复的字符

问题描述:编写一个函数,这个函数接受一个字符串作为参数,并返回第一个不重复的字符。例如,字符串"abbcda",c是第一个不重复的字符。 解决方法: 方法一:使用linkedHashMap来记...
  • Tian_Ex
  • Tian_Ex
  • 2016年01月10日 16:08
  • 521

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

第一种解法:import java.util.Scanner; import java.util.HashMap; /* * 用HashMap记录字符出现的次数,然后重新遍历一次,算法比较简单,但是...
  • wujingjing_crystal
  • wujingjing_crystal
  • 2016年09月20日 14:43
  • 271

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

#include #include using namespace std; //找出输入流中的第一个只出现一次的字符 class CharStatistics { public: Char...
  • szl_lxy
  • szl_lxy
  • 2015年08月14日 13:39
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符流中第一个不重复的字符
举报原因:
原因补充:

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