[剑指offer] 字符流中第一个不重复的字符

简介: 本文首发于我的个人博客:尾尾部落题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。

本文首发于我的个人博客:尾尾部落

题目描述

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

解题思路

用一个哈希表来存储每个字符及其出现的次数,另外用一个字符串 s 来保存字符流中字符的顺序。

  • 每次插入的时候,在字符串 s 中插入该字符,然后在哈希表中查看是否存在该字符,如果存在则它的 value 加1,如果不存在,它在哈希表中插入该字符,它的 value 为 1。
  • 查找第一个只出现一次的字符时,按照 s 的顺序,依次查找 map 中字符出现的次数,当 value 为 1 时,该字符就是第一个只出现一次的字符。

参考代码

import java.util.HashMap;
public class Solution {
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();
    StringBuffer s = new StringBuffer();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        s.append(ch);
        if(map.containsKey(ch)){
            map.put(ch, map.get(ch)+1);
        }else{
            map.put(ch, 1);
        }
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        for(int i = 0; i < s.length(); i++){
            if(map.get(s.charAt(i)) == 1)
                return s.charAt(i);
        }
        return '#';
    }
}
目录
相关文章
|
2天前
|
并行计算
求无重复字符的最长子串
求无重复字符的最长子串
|
8天前
3. 无重复字符的最长子串
3. 无重复字符的最长子串
23 0
|
8天前
|
Java Go
每日一题《剑指offer》字符串篇之字符流中第一个不重复的字符
每日一题《剑指offer》字符串篇之字符流中第一个不重复的字符
47 0
每日一题《剑指offer》字符串篇之字符流中第一个不重复的字符
|
8月前
无重复字符的最长子串
写一个if语句,当left小于right的时候,就写一个循环遍历从left下标开始的元素到right下标前面的元素,判断是否与right下标的元素相同,相同的话就跳出循环,令left 等于 与 right下标元素相同的元素后面的元素.怎么判断在left和right之间是否存在又和right相同的元素呢?这就用到了falg.如果left < right 的时候就让 right++; max = max = right - left + 1。
33 0
|
11月前
|
Go
剑指offer 52. 字符流中第一个只出现一次的字符
剑指offer 52. 字符流中第一个只出现一次的字符
35 0
|
11月前
剑指offer 51. 字符串中第一个只出现一次的字符
剑指offer 51. 字符串中第一个只出现一次的字符
51 0
|
机器学习/深度学习 算法
【数据结构与算法】无重复字符的最长子串
【数据结构与算法】无重复字符的最长子串
【数据结构与算法】无重复字符的最长子串
|
Go
26.字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
47 0
|
机器学习/深度学习
剑指offer 50 第一个只出现一次的字符
剑指offer 50 第一个只出现一次的字符
73 0
【刷题】无重复字符的最长子串
【刷题】无重复字符的最长子串
【刷题】无重复字符的最长子串