美文网首页
剑指offer50_第一个只出现一次的字符

剑指offer50_第一个只出现一次的字符

作者: zhouwaiqiang | 来源:发表于2019-03-27 19:44 被阅读0次

题目描述

  1. 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

输出描述

  1. 如果当前字符流没有存在出现一次的字符,返回#字符。

解题思路

  1. 采用散列表存储,键存储的是字符,值存储的是字符的次数
  2. 因为是数据流读入要保证数据的顺序性,因此我采用LinkedHashMap实现,HashMap是无序的,但LinkedHashMap是有序表,因此可以满足要求
  3. 静态代码块用于初始化map
  4. 插入的过程就是检索是否存在这个key,存在就将值加1,不存在就将put值1进去
  5. 取出的过程就是从头遍历,然后找到第一个value值是1的将其返回

Java源代码

import java.util.*;
public class Solution {
    private static Map<Character, Integer> map;
    {
        map = new LinkedHashMap<>();
    }
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        if (map.containsKey(ch)) {
            int temp = map.get(ch);
            map.put(ch, temp+1);
        }
        else map.put(ch, 1);
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if (entry.getValue()==1) return entry.getKey(); 
        }
        return '#';
    }
}

相关文章

网友评论

      本文标题:剑指offer50_第一个只出现一次的字符

      本文链接:https://www.haomeiwen.com/subject/lzvtbqtx.html