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

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

题目其实是对字符有两个要求:1.不重复;2.第一个;
不重复可以用哈希表来实现,第一个用队列来实现。
如果队列队首元素的哈希表值是1,那就是它了,如果不是,那就队首出队,检验下一个元素。
这里循环的长度是哈希表的长度,因为哈希表的长度必然小于等于队列的长度,而且也够用了。
队列没有top函数,是用front和back来返回队首和队尾的元素。

class Solution
{
public:
	map<char,int> temp;
	queue<char> cnt;
  //Insert one char from stringstream
	void Insert(char ch)
	{
		cnt.push (ch);
		 temp[ch]++;
	}
  //return the first appearence once char in current stringstream
	char FirstAppearingOnce()
	{
	  int len=temp.size ();
	  for(int i=0;i<len;++i)
	  {
		   if(temp[cnt.front ()]==1)
			  return cnt.front ();
		  else 
			  cnt.pop();
	  }
	  return '#';
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值