您的位置:首页 > Web前端

剑指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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法