剑指Offer_54_字符流中第一个不重复的字符
来源:互联网 发布:阿里云网站备案查询 编辑:程序博客网 时间:2024/05/18 02:07
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
解题思路
每次插入一个字符,就判断该字符是否已经出现,对应位置的值,如果为-1,则说明没有出现过,就该对应的值改为当前字符出现在字符流中的位置,如果大于等于0,或者为-2,说明已经出现过,设置值为-2。
输出时,找到每一个出现一次的字符,并找到出现位置最小的那个值。
实现
public class Solution { int[] cIndexes = new int[256]; int index = 0; { for (int i = 0; i < cIndexes.length; i++){ cIndexes[i] = -1; } } //Insert one char from stringstream public void Insert(char ch) { //插入数据,判断当前字符是否是第一次出现,是(为-1)则在对应的位置插入 // 当前字符出现在字符流的位置,否则置为已经出现过(-2) if (cIndexes[ch] == -1){ cIndexes[ch] = index; }else if (cIndexes[ch] >= 0){ cIndexes[ch] = -2; } index ++; } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { //遍历每一个出现一次的字符,将index最小的值返回 int min = Integer.MAX_VALUE; char minC = '#'; for (int i = 0; i < cIndexes.length; i++){ if (cIndexes[i] >= 0 && cIndexes[i] < min){ min = cIndexes[i]; minC = (char) i; } } return minC; }}
0 0
- 剑指Offer_54_字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 55 - 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 【算法】字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符 java
- 字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- 字符串------字符流中第一个不重复的字符
- 【53】字符流中第一个不重复的字符
- 字符流中第一个不重复的字符
- vim基本操作
- 公约数的简单应用
- PS中灰度图像如何查看像素值
- 过拟合的解决方法
- python学习(13)————jieba进阶生成词云
- 剑指Offer_54_字符流中第一个不重复的字符
- java自带线程池和队列详细讲解
- 冒泡排序法
- ROS+科大讯飞语音=让你的机器人能听会说---(三)识别篇
- mysql字符集介绍
- P NP NPC问题
- 关于String的操作及格式化
- 小米笔试题
- Foundation和UIKit框架组织图