题⽬描述
请实现⼀个函数⽤来找出字符流中第⼀个只出现⼀次的字符。例如,当从字符流中只读出前两个字符" go “时,第⼀个只出现⼀次的字符是” g “。当从该字符流中读出前六个字符“ google “时,第⼀个只出现⼀次的字符是” l “。
返回值描述:如果当前字符流没有存在出现⼀次的字符,返回 # 字符。
思路及解答
有序哈希表
可以直接使用哈希的数据结构来存取我们的字符,对与重复的字符可以对值进行统计或者标记都行。这里要用LinkedHashMap,因为题目要求到了要出现的第一个不重复的字符,所以如果不使用有序map的话,那么我们就不能保证取到的是第一个不重复的字符。
时间复杂度:插入O(1),查询最坏O(n)
空间复杂度:O(n)
队列+计数数组(最优)
结合了队列的先进先出特性和数组的快速访问能力,能够高效解决动态字符流中的首个不重复字符查找问题
时间复杂度:每个字符的插入操作是均摊O(1),查询操作是严格的O(1)
空间复杂度:O(1)(固定大小的数组和队列)
双数组记录
通过记录字符首次出现的位置和状态,在查询时进行全局扫描
时间复杂度:插入O(1),查询O(1)(固定128次循环)
空间复杂度:O(1)