首页 > 试题广场 >

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

[编程题]字符流中第一个不重复的字符
  • 热度指数:322393 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g" 。当从该字符流中读出前六个字符 “google" 时,第一个只出现一次的字符是"l"。

数据范围:字符串长度满足 ,字符串中出现的字符一定在 ASCII 码内。
进阶:空间复杂度 ,时间复杂度

后台会用以下方式调用 Insert 和 FirstAppearingOnce 函数
string caseout = "";
1.读入测试用例字符串casein
2.如果对应语言有Init()函数的话,执行Init() 函数
3.循环遍历字符串里的每一个字符ch {
Insert(ch);
caseout += FirstAppearingOnce()
}
2. 输出caseout,进行比较。

输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
示例1

输入

"google"

输出

"ggg#ll"
示例2

输入

"abcdee"

输出

"aaaaaa"
头像 牛客题解官
发表于 2020-06-02 11:20:20
精华题解 题目的主要信息: 实现一个函数用来找出字符流中第一个只出现一次的字符 Insert函数插入字符流的下一个字符, FirstAppearingOnce找到第一个不重复出现的字符 如果找不到返回# 字符串中出现的字符一定在 ASCII 码内 举一反三: 学习完本题的思路你可以解决如下题目: JZ50 展开全文
头像 江南好___
发表于 2021-07-01 00:47:45
精华题解 描述 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 展开全文
头像 Maokt
发表于 2021-06-28 17:25:07
精华题解 算法思想一:哈希表 解题思路: 通过哈希表统计字符流中每个字符出现的次数,顺便将字符流保存在string中,然后再遍历string,从哈希表中找到第一个出现一次的字符 图解: 代码展示: Python版本 # -*- coding:utf-8&n 展开全文
头像 不是江小白
发表于 2021-06-29 18:30:54
精华题解 1.常规正向思路 (首先小小吐槽一下:牛客为啥非要把简单的题目搞得很复杂。。。明明这题一个函数就可以解决的非要搞两个,但是为了遵守官方的规则,只有复杂一下(ˉ▽ˉ;)...)我们还是先看题目描述:“请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"g 展开全文
头像 凉风起天末
发表于 2020-02-02 22:22:20
一种优化思路:无须次次进行遍历 这道题目的大致思路其实都差不多,只不过看了许多答案,发现都是存储了所有字符,然后再进行遍历判断其实并不需要这样。 用户 txlstars 的回答和本文的优化相同(绝对不是面向 Ctrl+C 编程的~) 字符出现次数的判断(不重复字符):这个做法大致相同,利用 Hash 展开全文
头像 Ironxin
发表于 2020-04-21 23:20:59
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。   看到出现1次 展开全文
头像 上二层楼
发表于 2019-07-26 23:23:25
class Solution { public:     //仿照hash表实现,str存储插入的字符,hash[256]存储插入字符的个数     string str;     char hash[256] = {0};   展开全文
头像 一颗闪闪发亮的马路星
发表于 2020-02-16 00:56:50
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l" 这题其实并不难,里面需要唯一注意的点就是我们需要返回的字符是 第一次只出现一次的 展开全文
头像 Ok内推大师兄
发表于 2019-11-28 20:54:26
LinkedHashMap<Character,Integer> map = new LinkedHashMap<>(); public void Insert(char ch) { if(map.containsKey(ch)) { 展开全文
头像 谁谁谁201903271528594
发表于 2020-05-05 21:51:45
class Solution:     # 返回对应char     def __init__(self):       &nbs 展开全文
头像 法拉利201903231900848
发表于 2019-08-06 17:41:24
# -*- coding:utf-8 -*- class Solution:     def __init__(self):         展开全文
头像 北鼻子
发表于 2020-06-25 13:29:51
思路分析 1、Insert方法的作用我们在每次插入一个字符char的时候,就把其累加到字符串input上,并且借助map比较这个字符串是否已经存在于map中(map的key是字符串,value是这个字符串出现的次数) 如果本身map中无这样一个key,就把key设置进去,且value=1 如果本身 展开全文
头像 中工升达预备毕业生
发表于 2019-11-26 20:05:49
看到很多讨论代码中FirstAppearingOnce()方法中都是这样写的:for(char ch : str) | for(int i=0;i<size;++i)真的是... emmm... 【澄清】offer书上代码中occurrence[i]数组有两个作用,很是巧妙: 记录字符出现的 展开全文
头像 高非凡
发表于 2021-05-19 15:33:02
import java.util.*; public class Solution { //Insert one char from stringstream //思路: // 插入时: // 建一个map,用来存放每个字符出现的次数。建一个队列Queue用来按顺序存 展开全文