剑指Offer--字符流中第一个不重复的字符
2015-10-31 13:57
429 查看
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
算法思路
(1)采用哈希的思想,对每个字符在原串中出现的位置进行哈希映射,如果哈希值为0,说明是第一次出现,如果不为0,则之前出现过,此字符非我们所要查找的,置为-1(2)找到只出现一次,且最早出现的字符。
代码实现
public class Solution { final static int num = 256; int arr[] = new int[num]; int index = 1; //Insert one char from stringstream public void Insert(char ch) { if(arr[ch] == 0) //第一次出现,则存出现的顺序 arr[ch] = index; else //非首次出现,此字符视为无效 arr[ch] = -1; index++; } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { int tmp = num; char result = '#'; for(int i = 0; i < num; i++){ if(arr[i] > 0 && tmp > arr[i]){ //arr[i]>0表示找到出现次数只为1的字符,tmp>arr[i]表示找到最早出现的字符,tmp为出现的顺序 tmp = arr[i]; result = (char)i; } } return result; } }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例