当前位置:  首页>> 技术小册>> 数据结构与算法(中)

题目描述

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

解法1

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

  1. /**
  2. * @author mcrwayfun
  3. * @version v1.0
  4. * @date Created in 2019/01/25
  5. * @description
  6. */
  7. public class Solution {
  8. private StringBuilder res = new StringBuilder();
  9. private Map<Character, Integer> characterMap = new HashMap<>();
  10. // Insert one char from stringstream
  11. public void Insert(char ch) {
  12. res.append(ch);
  13. characterMap.put(ch, characterMap.getOrDefault(ch, 0) + 1);
  14. }
  15. // return the first appearence once char in current stringstream
  16. public char FirstAppearingOnce() {
  17. for (char c : res.toString().toCharArray()) {
  18. if (characterMap.get(c) == 1) {
  19. return c;
  20. }
  21. }
  22. return '#';
  23. }
  24. }

测试用例

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

该分类下的相关小册推荐: