剑指offer17

题目描述

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

解题思路分析

其实这道题挺简单的,分两步能够作到函数

  • 先能够考虑使用一个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;
}
复制代码
相关文章
相关标签/搜索