找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符

题目描述:

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

分析:

字符只能一个一个从字符流中读出来,因此要定义一个容器来保存字符以及其在字符流中的位置。

  为尽可能搞笑解决问题,要在O(1)时间内往数据容器中插入字符,及其对应的位置,因此这个数据容器可以用哈希表来实现,以字符的ASCII码作为哈希表的键值key,字符对应的位置作为哈希表的值value。

  开始时,哈希表的值都初始化为-1,当读取到某个字符时,将位置存入value中,如果之前读取过该字符(即value>=0),将value赋值为-2,代表重复出现过。最后对哈希表遍历,在value>=0的键值对中找到最小的value,该value即为第一个只出现一次的字符,ASCII码为key的字符即为所求字符。

示例代码:

public class zifuliu_first_once {private static int[] occurence;private static int index = 0;private static void init_flag_arr() {occurence = new int[256];for (int i = 0; i < 256; i++) {occurence[i] = -1;}}private static void insert(char ch) {if (occurence[(int)ch] == -1) {occurence[(int)ch] = index;} else if (occurence[(int)ch] >= 0) {occurence[(int)ch] = -2;}index++;}private static char get_first_appear_once_char() {int min_index = Integer.MAX_VALUE;char ret = '*';for (int i = 0; i < 256; i++) {if (occurence[i] >= 0 && occurence[i] < min_index) {min_index = occurence[i];ret = (char) i;}}return ret;}public static void main(String[] args) {init_flag_arr();insert('g');insert('o');System.out.println(get_first_appear_once_char());insert('o');insert('g');insert('l');insert('e');System.out.println(get_first_appear_once_char());}
}

b60a5c6131a619ad877091f78af0b253.png
欢迎关注,一起学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10无法装载重装系统iso文件_win10镜像不能安装系统如何解决_win10镜像无法安装处理方法...

如今&#xff0c;大部分用户下载到的win10系统都是属于镜像文件&#xff0c;能够最大便利的让用户安装步骤简单化&#xff0c;可是最近有用户下载的win10系统中出现了镜像不能安装的问题&#xff0c;那么win10镜像不能安装系统如何解决呢&#xff1f;下面就来告诉大家win10镜像…

anaconda下载jupyter写python_如何安装Anaconda3和使用Jupyter

如何安装Anaconda3和使用Jupyter发布时间&#xff1a;2020-10-28 14:41:26来源&#xff1a;亿速云阅读&#xff1a;64作者&#xff1a;Leah这期内容当中小编将会给大家带来有关如何安装Anaconda3和使用Jupyter&#xff0c;文章内容丰富且以专业的角度为大家分析和叙述&#xff…

mysql 42642 安装报错_1/5 MySQL入门总结:下载安装

MySQL.msi版本下载&#xff1a;www.mysql.com >DOWNLOADS >Windows >MySQL Installer >mysql-installer-community-8.0.13.0.msi(不建议下载解压缩版&#xff0c;因为它还要配置my.ini文件&#xff0c;亲身实践&#xff0c;麻烦)安装&#xff1a;o. 缺失“Microsof…

java 3位小数_数字有效小数第三位四舍五入

[java]代码库import javax.swing.JOptionPane;public class Test{public static void main(String[] args){String sJOptionPane.showInputDialog("请输入数字&#xff1a;");double aDouble.parseDouble(s);//转换成数字double ba;//临时存储int p0;//用于计算小数从…

java实现文件合并_Java实现文件分割和文件合并实例

文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来)。找了好多博客&#xff0c;本来想转载一个来的 结果找不到了。很无奈。只好自己贴代码上了。当然我会尽力好好写注释的。文件切割器:import java.io.File;import java.io.FileNotFoundException;import java…

java 常量表达式_JavaSwitch语句:常量表达式是必需的,但它是常量

万千封印我知道编译器需要在编译时知道表达式才能编译一个开关&#xff0c;但是为什么foo.ba_常数不是呢&#xff1f;虽然从字段初始化后执行的任何代码的角度来看&#xff0c;它们都是常量&#xff0c;但它们不是编译时间常数在JLS所要求的意义上&#xff1b;见15.28常量表达式…

java web 开发技术大全 代码_Java Web开发技术大全

资深程序员全力打造&#xff0c;深入剖析SSH框架整合开发的精髓 全方位解读Java Web开发的基础知识、高级技术及应用案例 内容全面&#xff0c;讲解详细&#xff0c;全面覆盖JSP、Se rvlet、AJAX及SSH框架整合开发 避免冗长的理论讲解&#xff0c;而是直击主题&#xff0c;通过…

java nio doug_深入的聊聊 Java NIO

趁着三天假期&#xff0c;把Java NIO和Reactor模式整理总结了下&#xff0c;文章特别细节的知识点没有写&#xff0c;如一些API的具体实现。类似数据读到Buffer后再写出时&#xff0c;为什么需要复位操作&#xff0c;这些都属于NIO基础知识&#xff0c;是学习Reactor模式的前置…

java clone原理_详解Java中的clone方法 -- 原型模式

Java中对象的创建clone顾名思义就是复制&#xff0c; 在Java语言中&#xff0c; clone方法被对象调用&#xff0c;所以会复制对象。所谓的复制对象&#xff0c;首先要分配一个和源对象同样大小的空间&#xff0c;在这个空间中创建一个新的对象。那么在java语言中&#xff0c;有…

portal认证 java_华为5700交换机通过外部开源protal和本地aaa用户认证的一些问题

各位&#xff1a;您好&#xff0c;我通过一台华为5700交换机和一台portal服务器&#xff0c;想利用交换机本地的aaa认证&#xff0c;完成用户的上网认证。配置好后&#xff0c;用户可以重地向到portal页面&#xff0c;但是认证不能通过&#xff0c;具体配置如下&#xff1a;一、…

java复制一个对象_Java中对象的复制

假如说你想复制一个简单变量。很简单:1 int n 5;2 int m n;不仅仅是int类型&#xff0c;其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。但是如果你复制的是一个对象&#xff0c;情况就有些复杂了。假设说我是一个beginner&#xff0c…

HA集群实现原理 切换 JAVA_HA(一)高可用集群原理

高可用集群原理LVS集群DR模式简单的架构图如下所示&#xff1a;在上图的架构中&#xff0c;当Director服务器因软件、硬件、人为原因造成故障时&#xff0c;整个集群服务不可用&#xff0c;因此&#xff0c;需要再添加一台服务器实现Director服务高可用。整个系统的架构图如下所…

c语言指针没学可以学java_这是一篇来自刚脱离C语言的菜鸟所写下来的关于C语言之后转JAVA入门前期学习的感想...

/***My First writing*Name Li Tai Yue*Date 2018.12.14*/这是一篇来自刚脱离C语言的菜鸟所写下来的关于C语言之后转JAVA入门前期学习的感想。并且我也觉得这是一篇所有在校学习程序的小伙伴值得一看的文章。我想很多小伙帮都觉得敲代码是一件非常枯燥的事情&#xff0c;每天敲…

java 如何将数字倒置_每日一个小算法之整数中每位上的数字进行反转 20190810

题目要求&#xff1a;给出一个32位的有符号整数&#xff0c;你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21示例 4:输入&#xff1a;9646324351输出: 0注意&#xff1a;假设我们的环境只能存储得下 3…

java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级

大学的时候对web开发很感兴趣&#xff0c;对网页中的动画&#xff0c;对用户注册&#xff0c;对网页中表格填写等等都倍感兴趣。加之又有专业课程编程语言java&#xff0c;因此&#xff0c;对java web产生了浓厚的兴趣&#xff0c;再加之有北京圣思园 风中叶 大师的视频教程&am…

java apktoo_apktool.jar

apktool.jar是APKTOOL这个反编译工具必须用到的必备jar包&#xff0c;给大家提供最新的apktool.jar2.3.4&#xff0c;有需要的赶快下载吧&#xff01;。相关软件软件大小版本说明下载地址apktool.jar是APKTOOL这个反编译工具必须用到的必备jar包&#xff0c;给大家提供最新的ap…

Java 内存 关系_JVM和Linux之间的详细内存关系

JVM和Linux之间的详细内存关系在一些具有8g物理内存的服务器上&#xff0c;主要运行Java服务。系统内存分配如下&#xff1a;Java服务的JVM堆大小设置为6g&#xff0c;监视过程大约需要600m&#xff0c;Linux本身使用大约800m。从表面上看&#xff0c;物理记忆应该足够&#xf…

java遍历删除原理,Java 垃圾回收机制实现原理

一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制&#xff0c;使c程序员最头疼的内存管理的问题迎刃而解&#xff0c;它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制&#xff0c;Java中的对象不再有“作用域”的概念&…

matlab简易编程,MATLAB简单编程

本帖最后由 wanggh 于 2016-12-5 14:47 编辑用数值差分、SOR迭代法求雷诺方程和用牛顿迭代法求解轴向柱塞泵滑靴副压力场的算法&#xff0c;%油膜厚度场、压力场迭代 MATLAB只认弧度制&#xff0c;不认角度制clear all; % (60rpm1rad/s)wg1000; %1000…

php删除字段某个字段,php数如何组删除某个字段

【摘要】PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。下面是php数如何组删除某个字段&#xff0c;让我们一起…