字符流中第一个不重复的字符

一、题目来源链接
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”
二、题目分析
(1)使用数组record[]类似hash计数,字符为下表,值为该字符出现的次数;record[a]为a出现的次数
(2)使用Linkedlist存储,当字符a第一次出现时,直接加入list ;
当record[a]>1,字符a重复出现时,删除list中的a;
删除前要判断list是否包含a,因为可能a多次出现,之前已经删过了。
(3)list头部的元素为第一个不重复元素;如果List为空,说明没有不重复元素,返回#
三、代码

import java.util.LinkedList;
public class Solution {
    int record[]=new int[256];
    LinkedList<Character> list=new LinkedList<Character>();
    public void Insert(char ch){
        record[ch]++;
        if(record[ch]>1){//重复出现
            if(list.contains((Character)ch)){//删除list中包含的ch
            list.remove((Character)ch);
            }
        }else{list.add(ch);}//第一次出现 直接添加
    }
    public char FirstAppearingOnce(){
        if(list.size()==0)return '#';
        else return list.peek();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值