(剑指Offer)面试题55:字符流中第一个不重复的字符
题目:
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
思路:
字符流:像流水一样的字符,一去不复返,意味着只能访问一次。
方法1:将字符流保存起来
通过哈希表统计字符流中每个字符出现的次数,顺便将字符流保存在string中,然后再遍历string,从哈希表中找到第一个出现一次的字符;
方法2:哈希表特殊处理
同样通过哈希表来统计字符流中每个字符,不过不是统计次数,而是保存位置,哈希表初始化每个键值对应的value均为-1,如果字符出现一次,则value等于该字符的下标,如果字符出现两次,则value等于-2;这样遍历哈希表时,第一个value大于0的字符就是第一个出现一次的字符;
代码:
参考下面的在线测试代码
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/00de97733b8e4f97a3fb5c680ee10720?rp=3
AC代码:
方法1:
class Solution
{
private:
string str;
int count[256]={0};
public:
//Insert one char from stringstream
void Insert(char ch)
{
str+=ch;
count[ch]++;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
int len=str.size();
for(int i=0;i<len;i++){
if(count[str[i]]==1)
return str[i];
}
return '#';
} };
方法2:(暂未AC,原因不详)
class Solution
{
private:
int index;
int count[256];
public:
Solution():index(0){
for(int i=0;i<256;++i)
count[i]=-1;
}
//Insert one char from stringstream
void Insert(char ch)
{
if(count[ch]==-1)
count[ch]=index;
else if(count[ch]>=0)
count[ch]=-2;
++index;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
int minIndex=numeric_limits<int>::max();
for(int i=0;i<256;i++){
if(count[i]>=0 && count[i]<minIndex)
return char(i);
}
return '#';
} };
(剑指Offer)面试题55:字符流中第一个不重复的字符的更多相关文章
- 【剑指Offer】字符流中第一个不重复的字符 解题报告(Python)
[剑指Offer]字符流中第一个不重复的字符 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...
- 剑指offer35题:第一个只出现一次的字符+剑指offer55题:字符流中第一个不重复的字符+剑指offer51题:数组中重复的数字
在看剑指offer的时候,感觉这三个题目很像,都是用哈希表可以解决,所以把这三个题整理出来,以供复习. 剑指offer35题:第一个只出现一次的字符 题目描述:在字符串中找出第一个只出现一次的字符.如 ...
- 剑指offer——python【第54题】字符流中第一个不重复的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- Go语言实现:【剑指offer】字符流中第一个不重复的字符
该题目来源于牛客网<剑指offer>专题. 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是 ...
- 剑指Offer 54. 字符流中第一个不重复的字符 (其他)
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- 剑指offer五十四之字符流中第一个不重复的字符
一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- 剑指Offer——字符流中第一个不重复的字符
题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读 ...
- 【剑指Offer】54、字符流中第一个不重复的字符
题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字 ...
- [剑指offer] 54. 字符流中第一个不重复的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
随机推荐
- 【2-SAT】The Ministers’ Major Mess UVALive – 4452
题目链接:https://cn.vjudge.net/contest/209474#problem/C 题目大意: 一共有m个提案,n个政客,每个政客都会对一些提案(最多四个)提出自己的意见——通过或 ...
- css加载方式link和@import的区别!
本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别. 1. 老祖宗的差别.link属于XHTML标签,而@import完全是CSS提供的一种方式. link标签除了可以加载CSS外,还可 ...
- 行转列之后的datagrid的保存
行专列之后,查询的存储过程为 1 USE [APS_Future_FT] 2 GO 3 /****** Object: StoredProcedure [dbo].[P_APS_H_InternalS ...
- python 爬虫 User-Agent
USER_AGENTS = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chro ...
- 理解面向消息中间件及JMS 以及 ActiveMQ例子
为了帮助你理解ActiveMQ的意义,了解企业消息传送背景和历史是很重要的.讨论完企业消息传送,你将可以通过一个小例子了解JMS及其使用.这章的目的是简要回顾企业消息传送及JMS规范.如果你已经熟悉这 ...
- 「UOJ207」共价大爷游长沙
「UOJ207」共价大爷游长沙 解题思路 : 快速判断两个集合是否完全相等可以随机点权 \(\text{xor}\) 的思路可以用到这道题上面,给每一条路径随机一个点权,维护出经过每一条边的点权的 \ ...
- CDOJ 1294 天行廖的游戏 dp 容斥
天行廖的游戏 题目连接: http://acm.uestc.edu.cn/#/problem/show/1294 Description 天行健,君子以自强不息.地势坤,廖爷以厚德载物 一日在喵哈哈村 ...
- windows2008服务器连接Oracle慢的问题。
昨天发布程序到2008服务器的IIS,从Sql Server数据库取数没问题,但是从Oracle数据库取数,非常的慢,同样的程序在2003服务器上没问题,本机也没问题.一开始怀疑是这台机器有问题,后来 ...
- 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX
https://www.v2ex.com/t/279405 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX pip 更新到最新 sudo apt inst ...
- Microcontroller measures resistance without an ADC
Sensors automate most of the processes in industry. Most of these sensors, such as those for ammonia ...