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

题目:在一个字符串中找到第一个只出现一次的字符。如输入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 阅读详情

相关推荐

DSP配置I2C通讯(非IO口软件模拟时序)

dsp即数字信号处理器,是一种广泛应用的嵌入式处理器,主要应用是实时快速地实现各种数字信号处理算法,目前,国际主要的dsp供应商是ti公司,其tms32系列产品占据了dsp市场近一半的份额,本文以TMS320F28377D为例,使用ti公司dsp开发工具ccs10.1配置i2c模块。 写这篇文章的缘由,因为市面上很多DSP其实内部是具有硬件I2C接口的,但由于网络上大部分资料和例程都是利用IO口模拟I2C时序进而实现I2C通讯的。给很多想学习硬件I2C通讯的小伙伴带来了困难。 下面先介绍一下配置步骤 1.E

weixin_44387442的博客 5544

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

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

akalius的专栏 242

【开关电源篇】开关电源——只需这三个阶段,从电源小白到维修大神

🔌 该篇为的原创文章跳转目录,小二持续更新跳转链接,尽情关注!

2301_81299416的博客 2390

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

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

suohanfjiusbis的博客 917

实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事

本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。

weixin_33720078的博客 442

MacOS Intel芯片实战:Docker Compose一键部署Dify全流程解析

本文详细解析了在搭载Intel芯片的MacOS系统上,使用Docker Compose一键部署开源LLM应用开发平台Dify的全流程。内容涵盖环境准备、Docker配置与镜像加速、代码拉取与配置初始化、服务启动与问题排查,以及访问验证与初步探索,旨在帮助开发者快速在本地搭建私有化AI应用开发环境。

ik678901234的博客 619

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

如输入一个字符串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

第0章 《机器人工程师带你入门SLAM》专栏所有文章目录汇总(截止目前115篇文章),方便大家查看阅读

《机器人工程师带你入门SLAM》专栏文章汇总:优快云热销专栏已更新100+篇优质内容,涵盖SLAM技术全栈知识体系。文章分为三大类:1)基础工具与环境配置,包括Ubuntu、Git等必备技能;2)C++编程从入门到进阶,详解变量、类、模板等核心概念;3)SLAM核心库实战,深入解析ROS、Eigen、PCL等关键库的应用。专栏提供从计算机基础到项目实战的系统学习路径,并附代码实例。点击专栏主页可订阅查看全部内容,后续将保持更新。

行知SLAM 1068

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

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

zsbailong的博客 9249

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3932

全15万字丨PyTorch 深度学习实践、基础知识体系全集;忘记时,请时常回顾。

本篇博客介绍的知识是——深度学习之PyThon框架基础。这是深度学习/神经网络的基础,多次回顾,会有不一样的感受。书读百遍,其义自见。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 5786

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

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

weixin_30687811的博客 719

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

fjkgh的博客 1636

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

wlxiong的博客 879

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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、付费专栏及课程。

余额充值