给定一个字符串,输出第一个只出现一次的字符

题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。
看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂度是O(n2)。我们试着去找一个更快的方法。
由于题目与字符出现的次数相关,我们是不是可以统计每个字符在该字符串中出现的次数?要达到这个目的,我们需要一个数据容器来存放每个字符的出现次数。在这个数据容器中可以根据字符来查找它出现的次数,也就是说这个容器的作用是把一个字符映射成一个数字。在常用的数据容器中,哈希表正是这个用途。
哈希表是一种比较复杂的数据结构。由于比较复杂,STL中没有实现哈希表,因此需要我们自己实现一个。但由于本题的特殊性,我们只需要一个非常简单的哈希表就能满足要求。由于字符(char)是一个长度为8的数据类型,因此总共有可能256 种可能。于是我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项,而数组中存储的是每个字符对应的次数。这样我们就创建了一个大小为256,以字符ASCII码为键值的哈希表。
我们第一遍扫描这个数组时,每碰到一个字符,在哈希表中找到对应的项并把出现的次数增加一次。这样在进行第二次扫描时,就能直接从哈希表中得到每个字符出现的次数了。

java代码参考:

public static char FirstNotRepeatingChar(String str)    
     {    
        if(str == null || str.equals(""))    
            return 0;    
        int []counts = new int[256];    
        char ch;    
        int index;    
        for(int i=0; i < str.length();i++)    
         {    
             ch = str.charAt(i);    
             index = (int)ch;    
             counts[index]++;    
         }    
        for(int i =0; i< str.length(); i++)    
         {    
             ch = str.charAt(i);    
             index = (int)ch;    
            if(counts[index] == 1)    
                return ch;    
         }    
        return 0;    
     }   
 

 

【OJ每日一练】1260 - 找第一个只出现一次的字符 问题描述: 给定一个只包含大小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入 一个字符串,长度小于100000。 输出 输出第一个仅出现一次的字符,若没有则输出no。 样例 输入 abCabd 输出 C Java代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); String 阅读详情

相关推荐

【车辆仿真】从0开始建立dSPACE RT Simulink工程:CAN通信(RTICANMM方法)

【工程环境信息】:本文基于链接文章搭建SCALEXIO Rack RTPC总线节点,用于与AutoBox通信硬件:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):AutoBox (DS1006)板卡:DS6342软件:本文所使用的DBC链接提示:以下是本篇文章正文内容,下面案例可供参考!!!的部分一定记得配置,其他的按需配置RTICANMM的灵活度非常高,尽可能参考Help文档,理解相应的配置内容官方有RTICANMM的样例工程,在下方路径。

winnizap的博客 2381

突然发现没真正领悟哈希表

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂度是O(n2)。我们试着去找一个更快的方法。 ...

akalius的专栏 242

【MIT-BEVFusion代码解读】第四篇:融合特征fuser和解码特征decoder

的大小,实际上源代码也是这么做的。最后将得到两个分支的特征进行。,第一个特征使用卷积降低通道数即可,第二个则需要反卷积来提升。所以backbone只有两个分支,都是5个卷积模块组成。的长和宽都减半至90,然后在经过5个相同的。将通道降至128,后面再接5个相同的。,将通道数128上至256,并且将。特征进行融合,这里使用的。部分由两部分组成,分别是。,这个分支首先经过第一个。,然后再卷积得到 =>提取特征,最后得到特征。得到了两个大小不同的。

非晚非晚的博客 2955

今天记录一下哈希表,因为一直有点不理解,所以今天查找了一些资料来理解哈希表

这道题使用的是哈希表,在python中字典就采用了哈希表,以键值对的形式来呈现。哈希表运用的方式主要是一个索引和一个值,值用来存储,索引用来记录存储值的位置。比如这道题就是链表的深拷贝,就采用了哈希表,在第一遍遍历过程中,就会把cur作为键,然后将cur.val作为新节点的值,第二次遍历的时候,将原来链表的指针更新为经过深拷贝之后的指针,就是第一次是将原链表与这个链表进行映射,就是这两个链表之间的关系,第二次遍历是将这个链表的指针更新为自己链表,而将原链表的映射全部删除。

suohanfjiusbis的博客 917

【超详细】数据分析笔试题分享,可以收藏后仔细阅读_数据分析岗位笔试题目

这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。15、在某座城市出现了某种流行病,且已知某座城市男女人数相同,男性患该病的概率为5%,女性为0.25%,现已知该城市的小明得了此病,请问小明为男性的概率是() B。D项,使用方差作为特征评分标准,如果某个特征的取值差异不大,通常认为该特征对区分样本的贡献度不大,因此在构造特征过程中去掉方差小于阈值的特征。LTV,用户生命周期价值,是产品从用户获取到流失所得到的全部收益的总和。

2401_89824744的博客 948

国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核

从板子整体角度来看,这是一款国产化程度很高的板子,从主控FPGA,到JTAG芯片,存储芯片、电源芯片等,都是使用的国产半导体公司的产品。板子整体尺寸也比较迷你,属于小而美类型的,可以认为是一款FPGA核心板,当然也预留了排针接口,给用户足够的扩展空间。对于想了解高云小蜜蜂SoC软硬件开发,以及对云源软件、MCU开发环境做个深度评测来说足够了。JTAG调试器固件可以增加虚拟串口功能,对于板子本来来说面积不会有改动,只需要添加两根信号线即可。

whik1194的博客 6396

在字符串中找出第一个只出现一次的字符

如输入一个字符串char* s =“abcdacfgb”,最终输出‘d’。方法一:可以创建两个指针i,j,定义计数变量int count = 0;起点均为s[0],j先行,注意自己需要和自己比较 :i=j=0时, count++;当s[i]与s[j]相同时,count++;此时count&gt;1,将count重新置为0,i++, j重新从s[0]出发,如果j遍历一遍后,此时count仍为1,则说...

sinat_39295715的博客 5165

5.7 医疗 Agent 实战:构建一个懂“望闻问切”的智能医疗咨询助手

本文介绍了如何构建一个智能医疗咨询助手项目,通过LoRA微调和vLLM部署技术,将通用大模型改造为专业"AI皮肤科医生"。项目采用精简架构:Streamlit前端直接与vLLM推理服务通信,重点展示了微调模型在专业性、安全性和同理心方面的显著提升。实施步骤包括:部署微调模型、构建交互界面,并通过对比测试验证微调效果。项目强调AI仅作为咨询助手而非医生替代品,始终以引导用户寻求专业医疗帮助为核心目标,体现了负责任AI应用的关键原则。

yonggeit的博客 2962

信息学奥赛C++语言:找第一个只出现一次的字符

【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd 【输出样例】 c 代码 ...

zsbailong的博客 9249

【安全设备篇】HVV面试专题

还有就是这个可能是被访问的这个内网系统,本身业务系统存在业务逻辑问题,因为内网所布置的很多业务系统往往不会考虑一些安全性问题,比如在正常的业务逻辑请求中直接带了sql语句,就会触发设备规则产生告警,这一类是属于误报,然后会将此告警上报给研判人员,需要研判组专家和甲方客户确认下是否是该系统存在此业务逻辑问题,并且需要确认告警的源ip在此告警的时间段附近有没有进行操作过。天眼日志分析主要基于系统和应用程序的日志数据来识别安全威胁,而威胁感知则通过收集和分析多种来源的情报信息。理解威胁的性质和威胁背后的原理。

大河之犬的博客 7923

给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1。

1. 给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1。 sample: 输入:“abcdefcba” 输出:3 解法:先遍历字符串,用一个map记录每个字符出现的次数,再次遍历字符串,找到第一个只出现一次的字符,复杂度为O(n)。 #include <iostream> #include <string> #include <cst...

weixin_30687811的博客 719

深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑

本文深入介绍了NuPlayer的avsync逻辑和原理

张晖的专栏 1万+

给定一串字符串,只包含小写字母,找出第一个只出现一次的字母,若没有,输出no

方法一: 代码: using System; namespace c { class Program { static void Main(string[] args) { string a = Console.ReadLine(); int[] b = new int[26]; for(int i=0;i<a.Length ;i++) {

fairy_little的博客 2617

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

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

找第一个只出现一次的字符

【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd 【输出样例】 c 【参考程序】 #include<cstring> #include<cstdio> #include<iostream&...

fjkgh的博客 1636

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NOIP学习之字符串:59.找第一个只出现一次的字符

是用桶排序可以很方便解决不同字符出现次数问题

wlxiong的博客 879

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

B2110 找第一个只出现一次的字符

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。输出第一个仅出现一次的字符,若没有则输出。后边的for循环是这样写的只有80分。一个字符串,长度小于 1100。

小前日记 229

C语言 找第一个只出现一次的字符

Description 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 Input 一个字符串,长度小于100000。 Output 输出第一个仅出现一次的字符,若没有则输出no。 Sample Input abcabd Sample Output c Source Code #include<stdio.h> #include<string.h> int main() { char a[100000]; in

记录学编程后遇到的问题,注意点以及相关知识 1万+

找第一个只出现一次的字符(代码详解)

找第一个只出现一次的字符(代码详解)

Kxiansheng111的博客 514

1130:找第一个只出现一次的字符(桶排)

【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd 【输出样例】 c #if(1) #include <iostream> #include <stdio.h&g...

C_Dreamy的博客 441

在字符串中查找第一个只出现一次的字符

在字符串中查找第一个只出现一次的字符。例如输入字符串"abaccdef",输出b,     分析:(1)创建一个数组,并初始化数组,                       (2)遍历字符串,把遇到的字符串的ACSII码值作为下标,后面每遇到一次,次数加一,              (3)遍历数组,如果遇到某个下标的次数为一则输出这个下标,如果只查找第一个,则输出一个就break  

xulu_258的专栏 2167

noi找第一个只出现一次的字符

描述 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入 一个字符串,长度小于100000。 输出 输出第一个仅出现一次的字符,若没有则输出no。 考虑 ababc,abcab,ababcc,ababcd,abcdab #include<iostream> #include<string> #include<cs...

Evernewss的博客 389
上一篇: encodeURI后台乱码(解决)
iteye_9721
博客等级 码龄8年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值