剑指offer17

135 阅读1分钟

题目描述

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

解题思路分析

其实这道题挺简单的,分两步可以做到

  • 先可以考虑使用一个HashMap来存储,将字符作键,出现次数当值,同时将字符加到List中,用来得到第一个出现一次的字符

代码实现

Map<Character, Integer> map = new HashMap<>();
List<Character> list = new ArrayList<>();

public void insert(char ch) {
    if (map.containsKey(ch)) {
        map.put(ch, map.get(ch) + 1);
    } else {
        map.put(ch, 1);
    }
    list.add(ch);
}

public char firstAppearingOnce() {
    char c = '#';
    for (char i : list) {
        if (map.get(i) == 1) {
            c = i;
            break;
        }
    }
    return c;
}