LeetCode387-字符串中的第一个唯一字符(查找,自定义数据结构)

一开始想用HashMap,把每个字符放进去,然后统计出现的次数。

使用LinkedHashMap的话,键值对的顺序都是不会变的。

LinkedHashMap<Character,Integer> map = new LinkedHashMap<>();map.put('i',1111);map.put('j',2222);map.put('k',3333);map.put('l',4444);//LinkedHashMap的values也是按key的顺序吗?Collection<Integer> values = map.values();Iterator<Integer> iterator = values.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}

 

输出的值是1111,2222,3333,4444

 

所以按照题目,只要判断出第一个出现次数为1的字符即可。

 

但是,无法找到正确的下标。

 

比如aaabbbbcaaad。

怎么知道c的下标呢?

很难。

 

最好的办法就是自定义一个数据结构,Map里面存这个结构

    public static class Node{//public char val;//第一次出现的下标public int index;//出现的次数public int count;public Node(char val,int index,int count){this.val = val;this.index = index;this.count = count;}}

 

这样,就能按照出场顺序记录每个字符了。相对位置是绝对正确的

还能获取他们的个数。以及首次出现的位置。

 

    public int firstUniqChar(String s) {//空的就是找不到if(s==null||s.length()==0){return -1;}LinkedHashMap<Character,Node> map = new LinkedHashMap<>();for(int i=0,len=s.length();i<len;i++){Node temp = map.get(s.charAt(i));if(temp==null){map.put(s.charAt(i),new Node(s.charAt(i),i,1));}else {//这两个引用,指向的是同一个地方,所以直接在这++就好了temp.count++;}}//结果也是按顺序的,找到最先出现那个即可Collection<Node> values = map.values();Iterator<Node> iterator = values.iterator();Node result = null;while(iterator.hasNext()){result = iterator.next();if(result.count==1)break;}//如果最后是次数1的就返回,如果最后还没有次数1的,就是找不到if(result.count==1){return result.index;}else {return -1;}}

 

转载于:https://www.cnblogs.com/weizhibin1996/p/9762278.html

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

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

相关文章

r psm倾向性匹配_南瓜香料指标psm如何规划季节性广告

r psm倾向性匹配Retail managers have been facing an extraordinary time with the COVID-19 pandemic. But the typical plans to prepare for seasonal sales will be a new challenge. More seasonal products have been introduced over the years, making August the bes…

主成分分析:PCA的思想及鸢尾花实例实现

主成份分析算法PCA 非监督学习算法 PCA的实现&#xff1a; 简单来说&#xff0c;就是将数据从原始的空间中转换到新的特征空间中&#xff0c;例如原始的空间是三维的(x,y,z)&#xff0c;x、y、z分别是原始空间的三个基&#xff0c;我们可以通过某种方法&#xff0c;用新的坐…

两家大型网贷平台竟在借款人审核问题上“偷懒”?

python信用评分卡&#xff08;附代码&#xff0c;博主录制&#xff09; https://study.163.com/course/introduction.htm?courseId1005214003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 放贷流量增加&#xff0c;逾期率也会随之增加&…

解决 Alfred 每次开机都提示请求通讯录权限的问题

安装完 Alfred 以后&#xff0c;每次开机都会提示请求通讯录权限&#xff0c;把设置里的通讯录关掉也没用&#xff0c;每次都提示又非常烦人&#xff0c;这里把解决方法记录一下。 依次打开 应用程序 - Alfred 3.app - 右键显示包内容 - Contents - Frameworks - Alfred Framew…

【转】DCOM远程调用权限设置

原文&#xff1a;https://blog.csdn.net/ervinsas/article/details/36424127 最近几天被搞得焦头烂额&#xff0c;由于DCOM客户端程序是在32位系统下开发的&#xff0c;调试时DCOM服务端也是安装在同一台机器上&#xff0c;所有过程一直还算顺利。可这次项目实施的时候&#xf…

opencv:边缘检测之Laplacian算子思想及实现

Laplacian算子边缘检测的来源 在边缘部分求取一阶导数&#xff0c;你会看到极值的出现&#xff1a; 如果在边缘部分求二阶导数会出现什么情况? 从上例中我们可以推论检测边缘可以通过定位梯度值大于邻域的相素的方法找到(或者推广到大 于一个阀值). 从以上分析中&#xff0c…

使用机器学习预测天气_如何使用机器学习预测着陆

使用机器学习预测天气Based on every NFL play from 2009–2017根据2009-2017年每场NFL比赛 Ah, yes. The times, they are changin’. The leaves are beginning to fall, the weather is slowly starting to cool down (unless you’re where I’m at in LA, where it’s on…

laravel 导出插件

转发&#xff1a;https://blog.csdn.net/gu_wen_jie/article/details/79296470 版本&#xff1a;laravel5 php 5.6 安装步骤&#xff1a; 一、安装插件 ①、首先在Laravel项目根目录下使用Composer安装依赖&#xff1a; composer require "maatwebsite/excel:~2.1.0"…

国外 广告牌_广告牌下一首流行歌曲的分析和预测,第1部分

国外 广告牌Using Spotify and Billboard’s data to understand what makes a song a hit.使用Spotify和Billboard的数据来了解歌曲的流行。 Thousands of songs are released every year around the world. Some are very successful in the music industry; others less so…

Jmeter测试普通java类说明

概述 Apache JMeter是Apache组织开发的基于Java的压力测试工具。本文档主要描述用Jmeter工具对基于Dubbo、Zookeeper框架的Cassandra接口、区块链接口进行压力测试的一些说明&#xff0c;为以后类似接口的测试提供参考。 环境部署 1、 下载Jmeter工具apache-jmeter-3.3.zip&am…

opencv:Canny边缘检测算法思想及实现

Canny边缘检测算法背景 求边缘幅度的算法&#xff1a; 一阶导数&#xff1a;sobel、Roberts、prewitt等算子 二阶导数&#xff1a;Laplacian、Canny算子 Canny算子效果比其他的都要好&#xff0c;但是实现起来有点麻烦 Canny边缘检测算法的优势&#xff1a; Canny是目前最优…

关于outlook签名图片大小的说明

96 dpiwidth576 height114转载于:https://blog.51cto.com/lch54734/2298115

opencv:畸变矫正:透视变换算法的思想与实现

畸变矫正 注意&#xff1a;虽然能够成功矫正但是也会损失了部分图像&#xff01; 透视变换(Perspective Transformation) 概念&#xff1a; 透视变换是将图片投影到一个新的视平面(Viewing Plane)&#xff0c;也称作投影映射(Projective Mapping)。 我们常说的仿射变换是透视…

数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多

数据多重共线性Multicollinearity is likely far down on a mental list of things to check for, if it is on a list at all. This does, however, appear almost always in real-life datasets, and it’s important to be aware of how to address it.多重共线性可能根本不…

PHP工厂模式计算面积与周长

<?phpinterface InterfaceShape{ function getArea(); function getCircumference();}/** * 矩形 */class Rectangle implements InterfaceShape{ private $width; private $height; public function __construct($width,$height){ $this->width$…

K-Means聚类算法思想及实现

K-Means聚类概念&#xff1a; K-Means聚类是最常用的聚类算法&#xff0c;最初起源于信号处理&#xff0c;其目标是将数据点划分为K个类簇&#xff0c; 找到每个簇的中心并使其度量最小化。 该算法的最大优点是简单、便于理解&#xff0c;运算速度较快&#xff0c;缺点是只能应…

(2.1)DDL增强功能-数据类型、同义词、分区表

1.数据类型 &#xff08;1&#xff09;常用数据类型  1.整数类型 int 存储范围是-2,147,483,648到2,147,483,647之间的整数&#xff0c;主键列常设置此类型。 &#xff08;每个数值占用 4字节&#xff09; smallint 存储范围是-32,768 到 32,767 之间的整数&#xff0c;用…

充分利用昂贵的分析

By Noor Malik努尔马利克(Noor Malik) Let’s say you write a query in Deephaven which performs a lengthy and expensive analysis, resulting in a live table. For example, in a previous project, I wrote a query which pulled data from an RSS feed to create a li…

【java并发编程艺术学习】(一)初衷、感想与笔记目录

不忘初心&#xff0c;方得始终。 学习java编程这么长时间&#xff0c;自认为在项目功能需求开发中没啥问题&#xff0c;但是之前的几次面试和跟一些勤奋的或者小牛、大牛级别的人的接触中&#xff0c;才发现自己的无知与浅薄。 学习总得有个方向吧&#xff0c;现阶段就想把并发…

层次聚类和密度聚类思想及实现

层次聚类 层次聚类的概念&#xff1a; 层次聚类是一种很直观的算法。顾名思义就是要一层一层地进行聚类。 层次法&#xff08;Hierarchicalmethods&#xff09;先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后&#xff0c;再 计算类与类之间的距离&#xff0…