剑指offer-面试题55-字符流中第一个不重复的字符

android osmdroid 加载常用离线地图格式(开源的在线地图) osmdroid是(几乎)完整/免费更换为Android MapView(v1 API)类。它还包括一个模块化的瓷砖供应商系统支持众多的在线和离线瓷砖来源和覆盖支持内置覆盖绘制图标,跟踪位置和形状。如果想在你项目中使用osmdroid,绝对是灵活度最高,不用申请百度,高德等的key。还有一堆规则要遵循。osmdroid可以支持多图层叠加,绘制自已的图层。离线加载常用地图格式zip,sqlite,. 阅读详情
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++;
		}
	}

}

ardupilot 方向余弦矩阵/旋转矩阵的理解 本节主要记录自己对ardupilot中用到的方向余弦矩阵/旋转矩阵的理解,欢迎批评指正,有些资料参考网上写的比较好的资料,免得查找资料麻烦。旋转矩阵的坐标理解:表示从旋转矩阵的下标的坐标系的坐标变换到上标表示的坐标系坐标下。旋转矩阵的坐标系理解:表示从旋转矩阵的上标的坐标系变换到下标表示的坐标系下。从旋转矩阵的投影更好理解,比如下面旋转矩阵的第一行是左边坐标系的第一维分量在右边坐标系的投影。 阅读详情

相关推荐

Ansys -PEmag 平面变压器仿真与circuit电路模型验证

ansys 软件集成了电路、磁路、PCB参数提取,结构参数提取等功能仿真,基于内置模块的功能参数的仿真后可以提取出主要关键参数,寄生参数,频域响应参数等。该软件的优势在于能够将所有的仿真参数导出为电路模型文件,可以在自带的模块中仿真也可以导出在其他第三方软件中仿真,比如matlab-simulink文件扥。主要介绍ANSYS插件的使用,对PEmag做了详细使用说明并通过案例得到对用的变压器参数;基于变压器参数再将其磁路模型导入到电路中进行建模仿真,实现PEmag与circuit的联合仿真。

weixin_41609745的博客 3016

剑指offer:面试题55——字符流中第一个不重复的字符

剑指offer:面试题55——字符流中第一个不重复的字符 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 思路:利用哈希表进行计算,哈希表所有初值赋为-1,如果当前出现了这个数,则记录它在串中出现的位置,如果这个数字是第二次以上...

MereX的博客 374

Java 开发打飞机小游戏(附完整源码)

上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐。代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习。 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy {

一只独孤的程序猿 1万+

剑指offer_面试题55_字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 思路: HashMap方法: import java.util.HashMap; import java.util.ArrayList; public class Solution { //Insert one char from stringstream HashM

wa2661391317的博客 183

别再为数据发愁:5分钟理解事件相机原理,并自己动手生成事件图像

本文深入浅出地解析了事件相机的工作原理,并提供了从静态图像生成事件数据的实用方法。通过Python代码示例,读者可以快速掌握如何模拟事件相机的输出,应用于机器人导航、自动驾驶等领域,解决数据获取难题。

weixin_31458015的博客 300

2023-10-20 - MacBook - 优化外接2k显示器体验:告别字小与字虚的终极指南

本文针对MacBook外接2K显示器时普遍遇到的字体过小和边缘发虚问题,提供了终极解决方案。通过深入解析macOS的HiDPI与Retina显示原理,并详细指导使用SwitchResX等工具开启隐藏的HiDPI模式,实现完美的2倍整数缩放,从而在保证字体大小合适的同时获得清晰锐利的显示效果,彻底告别字小与字虚的困扰。

solidity8miner的博客 476

【剑指Offer】面试题55:字符流中第一个不重复的字符

一:题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 二:解题思路 基础知识: 1.字符流:像流水一样的字符,一去不复返,意味着只能访

曦曦慕慕的专栏 385

【WiFi软件开发】IOCTL和Netlink----用户空间和内核空间交互的两种方式

linux开发中通常会涉及用户空间和内核模块的交互。本文介绍了两种典型的用户空间和内核模块通信方式:ioctl和netlink

liuwe1ye的博客 2348

剑指offer_面试题55_字符流中第一个不重复的字符 *

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是“g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符时“l”。 ps. 本题,我在阿里二面的时候,被问到了,需要注意。 第一种解法: 一种很笨的解法,时间效率低下,但确是我的第一反应。需要记下以便反思。 1、首先用一个指

依步_的专栏 2462

计算三维空间中AOA定位的 CRLB(Cramér–Rao 下界,克拉美罗下界)公式与MATLAB例程

摘要:本文介绍了三维空间中基于AOA(到达角度)测量的目标定位CRLB(Cramér–Rao下界)计算方法。通过定义目标位置向量、传感器位置和AOA测量角度(方位角与俯仰角),推导了方向向量和雅可比矩阵的表达式,并构建Fisher信息矩阵计算CRLB。提供了MATLAB例程实现该算法,包括参数设置、CRLB计算和可视化(3σ误差椭球)。实验结果表明,当目标位置偏离传感器阵列时,定位误差显著增大。该方法适用于评估AOA定位系统的理论性能极限,为导航与定位算法设计提供参考。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 588

Linux内存从0到1学习笔记(10.1 BugsShooter之cma配置过小导致页迁移繁忙而内存申请失败)

通过向武神讨教,顺便记录cma内存有空间但页繁忙(页正被访问,无法迁移)迁移不了导致cma内存分配失败的排查过程。

从0到1,突破自己 1万+

【剑指Offer学习】【面试题55:字符流中第一个不重复的字符】

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。举例说明  例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。当从该字符流中读出前六个字符“google”时,第一个只出现1次的字符是”l”。解题思路  字符只能一个接着一个从字符流中读出来。可以定义一个数据容器来保存字符在字符流中的位置。当一个字符第一次从字符流中读出来时,把它在字符流中的位置保存到数据容器里。

https://github.com/Wang-Jun-Chao 5312

CUDA&PCL 点云体素下采样

CUDA&PCL 点云体素下采样

dayuhaitang1的博客 1268

剑指offer 面试题55 字符流中第一个不重复的字符

剑指offer 面试题55 字符流中第一个不重复的字符 题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。 例如,当从字符流中只读出前两个字符 “go” 时,第一个只出现一次的字符是 “g”, 当从该字符串中读出前六个字符 “google” 时,第一个只出现一次的字符是 “l”。 package algorithm.foroffer.top60;import org

LYZ 632

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

剑指offer——面试题55:字符流中第一个不重复的字符

题目:     请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。     输出描述 : 如果当前字符流没有存在出现一次的字符,返回 # 字符。     代码: class Solution { public: strin

denghe优快云的博客 415

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

剑指offer-面试题55:字符流中第一个不重复的字符

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是‘g'。当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是'l'。 思路:这道题和面试题35非常相似,只不过那里是字符串这里变成字符流,动态的返回的只出现一次的结果。仍然采用哈希表来解决这个问题,用大小为256的数组来模拟哈希表,在面试题35那里

moses1213的专栏 505

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

《剑指Offer》面试题55:字符流中第一个不重复的字符

思路: 1.使用一个容器保存字符的当前下标,所有字符下标初始为0,插入的时候,如果判断这个字符下标数组不为0,则表明字符已经出现过,直接将数组置为1即可,否则则置为当前index值,并且index++,时间复杂度为O(1); 2.查找第一不重复字符时,循环判断整个容器数组保存的值,找出index值最小的一个数据,即为最先插入的字符。时间复杂度为O(256),因为256为常数,即复

我的专栏 427

剑指Offer面试题55:字符流中第一个不重复的字符 Java实现

题目:字符流中第一个不重复的字符         请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中读出前两个字符“go”时,第一个只出现一次的字符是“g”.当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是"l". 算法分析:         字符只能一个接着一个从字符流中读出来。可以定义一个数据容器来保存字符在字符流

做一名努力的通信程序员 546

剑指offer--面试题55:字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 python实现: # -*- coding:utf-8 -*- class Solut

qingyujean的博客 288

剑指offer面试题55 字符流中第一个不重复的字符(Java实现)

解题思路: 利用一个哈希表来存放字符出现的次数,键为char,值为字符出现的次数,同时利用一个集合ArrayList来存放每个出现的字符,用于在后续遍历时取到每一个字符 import java.util.ArrayList; import java.util.LinkedHashMap; public class Solution { //创建一个哈希表,用于存放字符流中每个字符出现的

Logan的博客 282

(剑指Offer)面试题55:字符流中第一个不重复的字符

题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 思路: 字符流:像流水一样的字符,一去不复返,意味着只能访问一次。 方法1:将字符流保存起来 通过哈希表统计字符流中每个字符出现的次数,顺便将字符流保存在string...

weixin_30763455的博客 69

《剑指Offer》学习笔记--面试题55:字符流中第一个不重复的字符

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是‘g’。当从该字符流中读出前六个字符“google”时,第一个只出现1次的字符是"l"。 字符只能一个接着一个从字符流中读出来。可以定义一个数据容器来保存字符在字符流中的位置。当一个字符第一次从字符流中读出来时,把它在字符流中的位置保存到数据容器里。当这个字符再次从字

wei.zhou的专栏 527

剑指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一起使

yxccc的博客 419
上一篇: hashMap线程不安全的原因及表现-2
下一篇: 剑指offer-面试题33-把数组排成最小的数
SaiW-n_n-
博客等级 码龄15年 46粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值