题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。

public class Solution {
    //Insert one char from stringstream
    public void Insert(char ch)
    {

    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {

    }
}

这道题目的意思就是要我们实现边插入,边寻找我们想要的元素,所以给出的样例中需要我们实现两个函数。
解题思路:我们可以用一个Map 存储 元素出现的个数,然后用队列存储 元素出现的顺序,结合两者来进行实现,队首元素应该总是我们想要的目标值。

  • FirstAppearingOnce处理逻辑:
    队列是否为空:
    是:则返回#表示找不到这样的元素;
    否:返回队首元素
  • Insert处理逻辑:
    判断是否在Map中包含:
    否:直接在队尾进行插入,并在map中插入;
    是:更新map中元素的个数;判断该值和队首元素是否相等,如果相等,那么我们应该更新队列值,使得最新的队首元素即为我们想要求解的元素值。
import java.util.Map;
import java.util.HashMap;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
     //Insert one char from stringstream
        Map<Character, Integer> counts;
        Queue<Character> queue;