找出一个字符串中出现次数最多的字_Day34:第一个只出现一次的字符

2afb510abb6707610d27838239e1c65d.png

剑指Offer_编程题——第一个只出现一次的字符

题目描述:

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置,如果没有则返回-1,需要区分大小写。(从0开始计数)。

具体要求:

时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M

具体思路:

思路一:

这道题刚开始感觉特别简单,可以用最简答、最粗暴的方法就可以解决,结果发现,其实是错的,其实,我们可以用python中的字典,只要定义一个字典即可将问题简单化。我们只需要把这些数字存在字典里,然后遍历整个字符串,如果i在count里,则count+1,否则将count置为1.重新遍历该字符串,这时候我们用到了 Python中的enumerate函数,在判断count是否为1,如果匹配成功,则返回该下标。具体我们用python实现该思路:

class Solution:def FirstNotRepeatingChar(self, s):if s == "":return -1else:count = {}for i in s:if i  in count:count[i] += 1else:count[i] = 1for index, i in enumerate(s):if count[i] == 1:return index

代码效果图如图所示:

a042152b3ffa543acbaf272db942d787.png

思路二

这道题其实可以用hashcode来解决。利用每个字母的ASCII码作hash来作为数组的index。首先用一个58长度的数组来存储每个字母出现的次数,为什么是58呢,主要是由于A-Z对应的ASCII码为65-90,a-z对应的ASCII码值为97-122,而每个字母的index=int(word)-65,比如g=103-65=38,而数组中具体记录的内容是该字母出现的次数,最终遍历一遍字符串,找出第一个数组内容为1的字母就可以了,时间复杂度为O(n)。

具体用java实现该思路:

public class Solution{public int FirstNotRepeatingChar(String str){int[] words = new int[58];for(int i = 0; i < str.length(); i++){words[(int)str.charAt(i) - 65] += 1;}for(int i = 0; i < str.length(); i++){if(words[(int)str.charAt(i) - 65] == 1)return i;}return -1;}
}

代码效果图如图所示:

89d6331e589d35d97b38eb06c0d42a30.png

总结

本道题主要考察字符串中字符出现的次数,刚开始想当然了,结果发现简单、粗暴的做法根本行不通,因此,转变了思路,用到了python中的字典,以及java中的hashcode,可以利用ASCII码作为index,总体来说该题还是挺简单的。因此,我们在做题的时候,应该多次尝试各种方法,扩展自己的思维,写出优质的代码。总之,我们要继续加油,争取早日找到工作,Good Luck!!!

参考文献

[1]杨二K

[2]zyp7355

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

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

相关文章

2020 WTM 继续向前

WTM3.1 正式发布在过去的2019年&#xff0c;承蒙各位的厚爱&#xff0c;WTM从零开始一年的时间在GitHub上收获了将近1600星&#xff0c;nuget上的下载量累计超过10万。WTM所坚持的低码开发&#xff0c;快速实现的理念受到了越来越多.netcore使用者的喜爱。在2020年&#xff0c;…

autowired用在static_java – @Autowired和static方法

您可以通过以下解决方案之一来实现此目的&#xff1a;使用构造函数Autowired这种方法将构造需要一些bean作为构造函数参数的bean。在构造函数代码中&#xff0c;设置静态字段的值为参数为构造函数执行。样品&#xff1a;Componentpublic class Boo {private static Foo foo;Aut…

使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性

什么样的HTTP方法是安全的&#xff1f; 如果一个方法不会改变资源的表述&#xff0c;那么这个方法就被认为是安全的。 例如 HTTP GET 和 HTTP HEAD 就被认为是安全的&#xff0c;但需要注意的是&#xff0c;这并不意味着执行GET请求就不会引起其它的资源操作&#xff0c;在表面…

混合背包问题

2020.12.30开始学习AcWing算法《算法竞赛进阶指南》&#xff1b; 上传博客方便复习。 //Wecccccccc //2020.12.31 #include <iostream> using namespace std; #include <vector>struct note {int kind;int v, w; };vector <note> kinds; int n, v, v1, w, dp…

.NET Core 3.1通用主机原理及使用

一、前言只是讲asp.net core 3.x通用主机的大致原理&#xff0c;这些东西是通过查看源码以及自己根据经验总结得来的&#xff0c;在文章中不会深入源码&#xff0c;因为个人觉得懂原理就晓得扩展点&#xff0c;后期碰到有需求的时候再仔细去研究源码也不迟。阅读前你应该先去了…

火焰效果材质实现_「游戏开发」使用Unity实现魔法火焰效果

*本文转载自公众号“Unity官方平台”。本文由视觉效果艺术家Evgeny Starostin分享如何使用Unity制作魔法火焰效果的过程&#xff0c;让我们一起学习和制作魔法火焰吧。下面是魔法火焰效果图。项目下载本文提供项目工程及着色器下载。本文为转载文章&#xff0c;请关注公众号“U…

激光炸弹(二维前缀和问题)

2020.12.30开始学习AcWing算法《算法竞赛进阶指南》&#xff1b; 上传博客方便复习。 //Wecccccccc //2021.1.2 #include <iostream> using namespace std; const int N 5010; int mp[N][N]; int main() {int n,m,k,r,x,y,w;cin>>k>>r;r min(r,5001);n m …

错误使用.Net Redis客户端CSRedisCore,自己挖坑自己填

本文2019年中原创首发于博客园&#xff0c;当时使用CSRedisCore的排障思路引起很大反响&#xff0c;当时被张队公众号翻牌&#xff0c;本次转回公号。背景上次Redis MQ分布式改造之后&#xff0c;编排的容器稳定运行一个多月&#xff0c;昨天突然收到ETL端同事通知&#xff0c;…

mysql 整数_MySQL 整数(int)数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型&#xff0c;大致可以分为三类&#xff1a;数值、日期/时间和字符串(字符)类型.数值类型(整型)MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMER…

最佳牛围栏(二分)

2020.12.30开始学习AcWing算法《算法竞赛进阶指南》&#xff1b; 上传博客方便复习。 #include <iostream> using namespace std; #include <algorithm> const int N 100001; int n, m; int cow[N]; double sum[N];bool check (double ave) {for (int i 1; i <…

IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

原文&#xff1a;https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇。Part 1 - 将.NET Standard 2.0 类库转换为.NET C…

mysql stack is full_mysql优化之表的优化与列类型选择

表的优化与列类型选择列选取原则####1、字段类型优先级整型 > date,time > char,varchar > blob因为 整型&#xff0c;time运算快&#xff0c;节省空间&#xff0c;char/varchar要考虑字符集的转换与排序时的校对集&#xff0c;速度慢&#xff0c;blob无法使用内存临时…

给一个不多于5位的正整数,求出它是几位数?

分别求每一位上的数字&#xff0c;关系如下&#xff1a; 求万位上的数&#xff1a;ten_thousandnum/10000; 求千位上的数&#xff1a;thousand(num%10000)/1000; 求百位上的数&#xff1a;hundred(num%1000)/100; 求十位上的数&#xff1a;ten(num%100)/10; 求个位上的数&#…

【敏捷案例】老板太外行,朝令夕改!要不要拿了年终奖就撤?

快到春节了&#xff0c;不知道有多少人在等着春节后跳槽&#xff0c;想跳槽的原因也很多&#xff0c;其中一个比较普遍的原因是和老板聊不到一块儿去。前两天&#xff0c;有个学员咨询了我们一个问题&#xff0c;因为这个问题比较普遍&#xff0c;拿出来和大家一起讨论一下~提出…

mysql商品规格设计_[电商]我的商品规格设计思路

这部分的设计必然少不了会有商品、货品、规格、规格值表。先说下我对四个表之间关系设计&#xff1a;商品与货品是一对多的关系。规格与规格值是一对多的关系。就这两种关系&#xff0c;关系很清晰&#xff0c;其实我刚开始的设计是这样的&#xff1a;商品与货品是一对多的关系…

冒泡排序及简单优化

普通冒泡排序&#xff1a; //Wecccccccc //2021.1.6 #include <iostream> using namespace std;int main() {int n, a[100];cin >> n;for (int i 0; i < n; i) {cin >> a[i];}for (int i 0; i < n - 1; i) {for (int j 0; j < n - 1; j) {if (a…

【2019总结篇】谈谈数字化时代,ERP如何坐稳数字化底座

源宝导读&#xff1a;面向未来&#xff0c;信息化、在线化、智能化&#xff0c;开放应该是数字化转型的核心要素&#xff01;本文将重点介绍2019年明源云ERP开放平台在推进数字化转型中的核心技术层面的实践成果。一、前言面向未来&#xff0c;信息化、在线化、智能化&#xff…

rjdbc读取mysql_R通过RJDBC连接外部数据库 (转)

1、library(RJDBC)drvconnlibrary(RJDBC)drvconn3、 连接sas的spdslibrary(RJDBC)drvconn dbSendUpdate(conn,"LIBNAME DEMO SASSPDS schemademoschema USERdemo PASSWORD{sas001}ZM0 HOST127.0.0.1 Serv5000") #注释&#xff1a;dbSendUpdate可以执行所有的sql语…

斐波那契数列及其优化

菲波那契数列定义为&#xff1a;f(1) 1; f(2) 1; 当n>2时&#xff0c;f(n) f(n-1) f(n-2)&#xff0c;输入n&#xff0c;求菲波那契数列的第n项。要求&#xff1a;用递归函数求菲波那契数列的第n项。 1.递归 代码如下&#xff08;未优化&#xff09;&#xff1a; //We…

dotNetCore操作Redis(含CentOS7哨兵模式部署)

现在说到使用缓存中间件基本就是 Redis 了&#xff0c;通常开发环境或测试环境部署一个单机版就可以运行了&#xff0c;但要上生产环境还需要进行高可用的方式来部署&#xff0c;本文说说在 CentOS7 中 Redis 高可用的部署以及在 dotNetCore 中怎样调用。环境CentOS&#xff1a…