50.字符流中第一个不重复的字符
2016-05-17 21:42
225 查看
字符流中第一个不重复的字符
参与人数:1434时间限制:1秒空间限制:32768K
本题知识点: 字符串
算法知识视频讲解
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
参与人数:1434时间限制:1秒空间限制:32768K
本题知识点: 字符串
算法知识视频讲解
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
对这个题目思考,可以发现,出现的字符 和 它的出现的次数 是一种对应关系,自然联想到 哈希表的 key-value 这种对应,或者应用关联容器 map,可以很方便的解决这个问题。map 容器中,它的一个元素 就是一组(key,value)对应的数据// 50.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <map> #include <vector> using namespace::std; class Solution { public: //Insert one char from stringstream void Insert(char ch) { vec.push_back(ch); map[ch]++; } //return the first appearence once char in current stringstream char FirstAppearingOnce() { for (int i = 0; i < vec.size(); i++) { if (map[vec[i]] == 1) { return vec[i]; } } return '#'; } private: map<char, int> map; vector<int> vec; }; int _tmain(int argc, _TCHAR* argv[]) { Solution s; s.Insert('g'); s.Insert('o'); s.Insert('o'); s.Insert('g'); s.Insert('l'); s.Insert('e'); int result = s.FirstAppearingOnce(); return 0; }
相关文章推荐
- Java基本数据类型
- Linux的五个查找命令 [转]
- 向国外作者发邮件要代码
- c++中vector的用法详解
- 各种加解密算法比较
- ImageLoader
- 如何通过使用匿名内部类来将线程代码隐藏在类中
- POJ 2312 Battle City【Bfs+优先队列】
- [置顶] Linux下使用nexus搭建maven私服
- 作用域运算符的有什么功能
- LeetCode Reverse Words in a String
- Ubuntu下启动Eclipse报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must
- MATLAB中的矩阵建立
- java之判断输入的字符类型个数
- 坦克大战(版本0.1-版本0.9)
- 内联函数
- C++实现委托机制(三)——lambda表达式封装
- C++的头文件和实现文件分别写什么
- HDU 2608 0 or 1(数学推导)
- 数据库中的基本概念