一、题目来源:链接
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”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();
}
}