Java 字符流中第一个不重复的字符详解

字符流中第一个不重复的字符

题目描述

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

解法1

与上一道题的思路是一致的。

/**
 * @author mcrwayfun
 * @version v1.0
 * @date Created in 2019/01/25
 * @description
 */
public class Solution {

    private StringBuilder res = new StringBuilder();
    private Map<Character, Integer> characterMap = new HashMap<>();

    // Insert one char from stringstream
    public void Insert(char ch) {
        res.append(ch);
        characterMap.put(ch, characterMap.getOrDefault(ch, 0) + 1);
    }

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

        for (char c : res.toString().toCharArray()) {
            if (characterMap.get(c) == 1) {
                return c;
            }
        }

        return '#';
    }
}

测试用例

  1. 功能测试(读入一个字符;读入多个字符;读入的所有字符都是唯一的;读入的所有字符都是重复出现的)。
  2. 特殊输入测试(读入0个字符)。

教程来源于Github,感谢apachecn大佬的无私奉献,致敬!

技术教程推荐

Vue开发实战 -〔唐金州〕

Linux实战技能100讲 -〔尹会生〕

雷蓓蓓的项目管理实战课 -〔雷蓓蓓〕

人人都能学会的编程入门课 -〔胡光〕

视觉笔记入门课 -〔高伟〕

Vim 实用技巧必知必会 -〔吴咏炜〕

MySQL 必知必会 -〔朱晓峰〕

运维监控系统实战笔记 -〔秦晓辉〕

AI大模型企业应用实战 -〔蔡超〕