博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer:字符流中第一个不重复的字符
阅读量:4060 次
发布时间:2019-05-25

本文共 1055 字,大约阅读时间需要 3 分钟。

题目描述

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

time and time again, i ask myself,问自己,为什么这么傻x,这么傻逼~

简单思路: map记录字符出现次数;数组记录insert的字符;每次遍历字符数组,结合map,看是否出现1次;
让我们问问神奇海螺吧后的神奇思路:
用一个数组,记录每个元素的出现次数;一个队列,将字符第一次出现的时候,加入队列;
取第一个出现次数为1的字符:找队首元素,判断其出现次数是否为1,如果是,则返回;如果不是,出队,判断下一个。
注意点:
字符,拥有其对应的整数,我想说的是,字符A,对应ascii中的65,字符a,对应97。

import java.util.LinkedList;public class Solution {
// 来自讨论区 int[] count = new int[128]; // 只有128个字符么 嗯。 LinkedList
queue = new LinkedList
(); //Insert one char from stringstream public void Insert(char ch) {
count[ch]++; if(count[ch] == 1){
queue.offer(ch); } } //return the first appearence once char in current stringstream public char FirstAppearingOnce() {
while(!queue.isEmpty()){
char cur = queue.peek(); if(count[cur] == 1){
return cur; } queue.pop(); } return '#'; }}

转载地址:http://ogwji.baihongyu.com/

你可能感兴趣的文章
【积跬步以至千里】如何查看浏览器保存的密码
查看>>
【opencv拓展】摄像头基本操作
查看>>
【数据结构周周练】001顺序表与链表(含上海大学832计算机组成原理与数据结构原题)
查看>>
C++获取数组长度(自写函数实现)
查看>>
C++报错:写入位置 0xCCCCCCCC 时发生访问冲突。
查看>>
C++报错:引发了未经处理的异常:写入访问权限冲突, p 是 0xCCCCCCCC
查看>>
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>
【数据结构周周练】003顺序栈与链栈
查看>>
【数据结构周周练】004顺序栈与链栈 -数制转换
查看>>
C++函数返回值介绍(含return 0 与 return 1 与 return -1介绍)
查看>>
C++报错:读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
查看>>
【数据结构周周练】005顺序队列与链队 -扑克牌的筛选
查看>>
【数据结构周周练】006队列基本操作-顺序结构及链式结构实现
查看>>
C++类、结构体、函数、变量等命名规则详解
查看>>
【数据结构周周练】007顺序结构实现完全二叉树操作- 求编号i与j最近公共祖先结点
查看>>
C++ goto语句详解
查看>>
【数据结构周周练】008 二叉树的链式创建及测试
查看>>
【数据结构周周练】009 二叉树的先序、中序、后序遍历(递归算法实现)
查看>>
【数据结构必备基本知识】递归与迭代的联系、区别与优缺点对比详解
查看>>