package case55_FirstCharInStream;
import java.util.LinkedHashMap;
/**
* 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。
* 当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是‘l’。
*
* @author WangSai
*
*/
public class FirstCharInStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("findMyFirsChar1 :");
System.out.println(findMyFirsChar1("g") + " : " + "g");
System.out.println(findMyFirsChar1("go") + " : " + "go");
System.out.println(findMyFirsChar1("goo") + " : " + "goo");
System.out.println(findMyFirsChar1("goog") + " : " + "goog");
System.out.println(findMyFirsChar1("googl") + " : " + "googl");
System.out.println(findMyFirsChar1("google") + " : " + "google");
System.out.println("new CharStatistics().findFisrtCharInStream:vvvvv");
System.out.println(new CharStatistics().findFisrtCharInStream("g") + ":" + "g");
System.out.println(new CharStatistics().findFisrtCharInStream("go") + ":" + "go");
System.out.println(new CharStatistics().findFisrtCharInStream("goo") + ":" + "goo");
System.out.println(new CharStatistics().findFisrtCharInStream("goog") + ":" + "goog");
System.out.println(new CharStatistics().findFisrtCharInStream("googl") + ":" + "googl");
System.out.println(new CharStatistics().findFisrtCharInStream("google") + ":" + "google");
}
/**
*
* @param str,待处理的字符
* @return 第一个不重复的字符
*/
private static char findMyFirsChar1(String str) {
// 异常值检测
if (str == null)
throw new IllegalArgumentException("非法输入参数,请重新检查...");
// 读取字符串的字符,并且按照读取的顺序依次存入容器中,键就是字符,值是出现的次数
int len = str.length();
LinkedHashMap<Character, Integer> lhm = new LinkedHashMap<>();
for (int i = 0; i < len; i++) {
// 容器中不存在,则添加
char key = str.charAt(i);
// 每读取一个字符,就判断容器中已经存在的不重复的第一个键,即value为1的键
if (!lhm.containsKey(key)) {
lhm.put(key, 1);
}
// 容器中已经存在则,值置为-1
else
lhm.put(key, -1);
}
char theKey = '#';
for (Character key : lhm.keySet()) {
if (lhm.get(key) == 1) {
theKey = key;
return theKey;
}
}
return theKey;
}
/**
* 自己创建哈希表容器,实现O(1)时间插入字符。 实现字符流中查找第一个不重复的数字。
*
* @author WangSai
*
*/
public static class CharStatistics {
// 创建辅助容器,存储字符在字符串中的位置,以字符对应的int值作为arr的角标。
// 容器中的值初始化为-1,存在重复的值得时候-2,只出现一次存储字符在字符串中的位置角标。
int[] arr = new int[255];
// 字符串的角标,默认为0角标
int strIndex = 0;
// 创建对象时,初始化辅助数组arr
public CharStatistics() {
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
}
public char findFisrtCharInStream(String str) {
// 异常值检测
if (str == null)
throw new IllegalArgumentException("非法输入参数,请重新检查...");
// 遍历str,把字符串以字符流的形式给Insert函数
for (int i = 0; i < str.length(); i++) {
// 把字符串以字符流的形式给Insert函数
Insert(str.charAt(i));
}
char theKey = '#';
// 获取arr中的最小非负值
int minIndex = Integer.MAX_VALUE;
// 遍历容器arr,获取最小的角标
for (int i = 0; i < arr.length; i++) {
// 保存的为角标,若不为负数,则说明出现而且只出现了一次。
if (arr[i] >= 0) {
if (arr[i] < minIndex) {
minIndex = arr[i];
theKey = (char) i;
}
}
}
return theKey;
}
// 处理从字符串中读到的每一个字符,并判断之前是否出现过。arr中存储了-1(没有出现过), -2(出现过至少2次) ,
// strindex值(只出现过一次且该值为在str中的角标)。
private void Insert(char ch) {
int arrIndex = (int) ch;
if (arr[arrIndex] == -1) {
arr[arrIndex] = strIndex;
}
// ch已经出现过1次或者出现过多次
else {
arr[arrIndex] = -2;
}
strIndex++;
}
}
}
相关推荐
Ansys -PEmag 平面变压器仿真与circuit电路模型验证
ansys 软件集成了电路、磁路、PCB参数提取,结构参数提取等功能仿真,基于内置模块的功能参数的仿真后可以提取出主要关键参数,寄生参数,频域响应参数等。该软件的优势在于能够将所有的仿真参数导出为电路模型文件,可以在自带的模块中仿真也可以导出在其他第三方软件中仿真,比如matlab-simulink文件扥。主要介绍ANSYS插件的使用,对PEmag做了详细使用说明并通过案例得到对用的变压器参数;基于变压器参数再将其磁路模型导入到电路中进行建模仿真,实现PEmag与circuit的联合仿真。
剑指offer:面试题55——字符流中第一个不重复的字符
剑指offer:面试题55——字符流中第一个不重复的字符 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 思路:利用哈希表进行计算,哈希表所有初值赋为-1,如果当前出现了这个数,则记录它在串中出现的位置,如果这个数字是第二次以上...
Java 开发打飞机小游戏(附完整源码)
上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐。代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习。 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy {
剑指offer_面试题55_字符流中第一个不重复的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 思路: HashMap方法: import java.util.HashMap; import java.util.ArrayList; public class Solution { //Insert one char from stringstream HashM
别再为数据发愁:5分钟理解事件相机原理,并自己动手生成事件图像
本文深入浅出地解析了事件相机的工作原理,并提供了从静态图像生成事件数据的实用方法。通过Python代码示例,读者可以快速掌握如何模拟事件相机的输出,应用于机器人导航、自动驾驶等领域,解决数据获取难题。
2023-10-20 - MacBook - 优化外接2k显示器体验:告别字小与字虚的终极指南
本文针对MacBook外接2K显示器时普遍遇到的字体过小和边缘发虚问题,提供了终极解决方案。通过深入解析macOS的HiDPI与Retina显示原理,并详细指导使用SwitchResX等工具开启隐藏的HiDPI模式,实现完美的2倍整数缩放,从而在保证字体大小合适的同时获得清晰锐利的显示效果,彻底告别字小与字虚的困扰。
【剑指Offer】面试题55:字符流中第一个不重复的字符
一:题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 二:解题思路 基础知识: 1.字符流:像流水一样的字符,一去不复返,意味着只能访
【WiFi软件开发】IOCTL和Netlink----用户空间和内核空间交互的两种方式
linux开发中通常会涉及用户空间和内核模块的交互。本文介绍了两种典型的用户空间和内核模块通信方式:ioctl和netlink
剑指offer_面试题55_字符流中第一个不重复的字符 *
题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是“g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符时“l”。 ps. 本题,我在阿里二面的时候,被问到了,需要注意。 第一种解法: 一种很笨的解法,时间效率低下,但确是我的第一反应。需要记下以便反思。 1、首先用一个指
计算三维空间中AOA定位的 CRLB(Cramér–Rao 下界,克拉美罗下界)公式与MATLAB例程
摘要:本文介绍了三维空间中基于AOA(到达角度)测量的目标定位CRLB(Cramér–Rao下界)计算方法。通过定义目标位置向量、传感器位置和AOA测量角度(方位角与俯仰角),推导了方向向量和雅可比矩阵的表达式,并构建Fisher信息矩阵计算CRLB。提供了MATLAB例程实现该算法,包括参数设置、CRLB计算和可视化(3σ误差椭球)。实验结果表明,当目标位置偏离传感器阵列时,定位误差显著增大。该方法适用于评估AOA定位系统的理论性能极限,为导航与定位算法设计提供参考。
Linux内存从0到1学习笔记(10.1 BugsShooter之cma配置过小导致页迁移繁忙而内存申请失败)
通过向武神讨教,顺便记录cma内存有空间但页繁忙(页正被访问,无法迁移)迁移不了导致cma内存分配失败的排查过程。
【剑指Offer学习】【面试题55:字符流中第一个不重复的字符】
题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。举例说明 例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。当从该字符流中读出前六个字符“google”时,第一个只出现1次的字符是”l”。解题思路 字符只能一个接着一个从字符流中读出来。可以定义一个数据容器来保存字符在字符流中的位置。当一个字符第一次从字符流中读出来时,把它在字符流中的位置保存到数据容器里。
CUDA&PCL 点云体素下采样
CUDA&PCL 点云体素下采样
剑指offer 面试题55 字符流中第一个不重复的字符
剑指offer 面试题55 字符流中第一个不重复的字符 题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符 “go” 时,第一个只出现一次的字符是 “g”, 当从该字符串中读出前六个字符 “google” 时,第一个只出现一次的字符是 “l”。 package algorithm.foroffer.top60;import org
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
剑指offer——面试题55:字符流中第一个不重复的字符
题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述 : 如果当前字符流没有存在出现一次的字符,返回 # 字符。 代码: class Solution { public: strin
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
剑指offer-面试题55:字符流中第一个不重复的字符
题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是‘g'。当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是'l'。 思路:这道题和面试题35非常相似,只不过那里是字符串这里变成字符流,动态的返回的只出现一次的结果。仍然采用哈希表来解决这个问题,用大小为256的数组来模拟哈希表,在面试题35那里
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
《剑指Offer》面试题55:字符流中第一个不重复的字符
思路: 1.使用一个容器保存字符的当前下标,所有字符下标初始为0,插入的时候,如果判断这个字符下标数组不为0,则表明字符已经出现过,直接将数组置为1即可,否则则置为当前index值,并且index++,时间复杂度为O(1); 2.查找第一不重复字符时,循环判断整个容器数组保存的值,找出index值最小的一个数据,即为最先插入的字符。时间复杂度为O(256),因为256为常数,即复
剑指Offer面试题55:字符流中第一个不重复的字符 Java实现
题目:字符流中第一个不重复的字符 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中读出前两个字符“go”时,第一个只出现一次的字符是“g”.当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是"l". 算法分析: 字符只能一个接着一个从字符流中读出来。可以定义一个数据容器来保存字符在字符流
剑指offer--面试题55:字符流中第一个不重复的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 python实现: # -*- coding:utf-8 -*- class Solut
剑指offer面试题55 字符流中第一个不重复的字符(Java实现)
解题思路: 利用一个哈希表来存放字符出现的次数,键为char,值为字符出现的次数,同时利用一个集合ArrayList来存放每个出现的字符,用于在后续遍历时取到每一个字符 import java.util.ArrayList; import java.util.LinkedHashMap; public class Solution { //创建一个哈希表,用于存放字符流中每个字符出现的
(剑指Offer)面试题55:字符流中第一个不重复的字符
题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 思路: 字符流:像流水一样的字符,一去不复返,意味着只能访问一次。 方法1:将字符流保存起来 通过哈希表统计字符流中每个字符出现的次数,顺便将字符流保存在string...
《剑指Offer》学习笔记--面试题55:字符流中第一个不重复的字符
题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。当从该字符流中读出前六个字符“google”时,第一个只出现1次的字符是"l"。 字符只能一个接着一个从字符流中读出来。可以定义一个数据容器来保存字符在字符流中的位置。当一个字符第一次从字符流中读出来时,把它在字符流中的位置保存到数据容器里。当这个字符再次从字
剑指offer 面试题55 字符流中第一个不重复的字符(push_back+resize出问题)
这道题考察对哈希表的应用.总结如下: 1. 解题思路为,大小为256的hash. 以 hash_table[i]=value 为例 i表示对应字符 value表示此字符未出现,出现过一次,出现过多次. value==-1:未出现 value>=0:出现过一次并且出现的顺序=value value==-1:出现过多次2.关于STL vector,原来resize和push_back一起使
3016



被折叠的 条评论
为什么被折叠?



