力扣387:字符串中的第一个唯一字符

news2024/12/24 10:39:26

题目描述:给定一个字符串s,找到它的第一个不重复字符,并返回索引,如果不存在,则返回-1.
在这里插入图片描述
提示:s 不为空且 s 只包含小写字母
思路:

  1. 将字符串中的每个字符遍历一次,将其中每个字符以及其出现的次数保存起来
  2. 再次遍历字符串,匹配我们存储元素和次数的集合,找到这个第一个出现的字符即可,返回其索引下标
    将字母转为整数,整形数组的下标对应了字符,数组中存储的元素即为出现的次数。
char c=s.charAt(i)//取出索引为i的字符
假设c==‘b’;//此时b这个字符至少出现了一次
data[c-'a']++;//就将b这个字符存储在了整型数组1的位置

data[c-‘a’]++;
此处的转换就是每个不同的小写字母相较于小写字母a的偏移量。
(每个不同的小写字母一定对应不同的整数)
‘a’-‘a’=0;
‘b’-‘a’=1;
‘c’-‘a’=2;

代码:

public static int FirstUniqChar(String s)
    {
        //s只包含小写字母,因此开辟长度为26的整型数组
        int[] data=new int[26];
        //1.遍历s字符串,将每个字母出现的次数保存在count中
        for(int i=0;i<s.length();i++)
        {
            char c=s.charAt(i);
            data[c-'a']++;
        }
        //count保存了每个不同字母以及其出现的次数
        //从前向后遍历第一次出现一次的字符
        for(int i=0;i< data.length;i++)
        {
            char c=s.charAt(i);
            if(data[c-'a']==1)
                return i;
        }
        return -1;
    }

方式二:
将字符串进行处理之后,进行反转,判断反转前后的字符串是否一致

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

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

相关文章

基于Java斗车交易系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

centos下的Nginx, tar安装不能使用systemctl启动问题

1.systemctl start nginx启动报错 2.报错原因 解压方式nginx&#xff0c;系统服务内没有nginx的服务&#xff0c;所以报错 3.配置nginx系统服务 1)/etc/init.d/目录下创建nginx 2)nginx文件内容 #!/bin/sh # nginx - this script starts and stops the nginx daemin # # c…

【漏洞案例】云上攻防之云主机中web应用自身漏洞

0x00 前言 最近在做项目的时候&#xff0c;测到了一个部署在云上的存在 Laravel UEditor SSRF 漏洞的站点&#xff0c;并且发现这个 SSRF 漏洞可以读取到临时凭证&#xff0c;这不巧了&#xff0c;正好最近写了一个云环境利用的工具。 开始之前这里先简单介绍一下这个工具&am…

(三)R-studio调度

1、准备测试脚本 from datetime import datetime print(111) print(datetime.now()) 2、设置定时调度 如果crontab没有安装&#xff0c;需要在root用户下安装&#xff0c;并启动&#xff0c;可参考&#xff1a;Ubuntu下crontab的安装和使用 (base) rstudio5abc0fae5cff:~/p…

JVM的OOM问题定位解决

1、生成dump文件&#xff08;错误日志文件&#xff09;&#xff0c;MAT可以进行解读 &#xff08;1&#xff09;参数 -XX:HeapDumpOnOutOfMemoryErrorOOM时导出堆到文件。 -Xms1m -Xmx8m -XX:HeapDumpOnOutOfMemoryError&#xff08;2&#xff09;设置参数 -Xms1m -Xmx8m -…

【Python】 Windows上通过git bash执行python卡住的解决方法

解决方法 编辑 C:\Program Files\Git\etc\profile.d\aliases.sh&#xff0c;将python2.7改成python 编辑完成后&#xff0c;重启git bash, 输入python即可 参考 https://blog.csdn.net/ofreelander/article/details/112058975

Linux网络环境配置

第一种方式&#xff08;自动获取&#xff09;&#xff1a; 说明&#xff1a;登陆后&#xff0c;通过界面的来设置自动获取IP 特点&#xff1a;Linux启动后会自动获取IP 缺点&#xff1a;是每次自动获取的IP地址可能不一样 第二种方法&#xff08;指定IP)&#xff1a; 1、说明…

kettle文件资源库之Show hidden folders

版本7.1 在创建文件资源库时&#xff0c;有一个选项“show hidden folders”。从字面上理解&#xff0c;是“显示隐藏文件夹”的意思&#xff0c;其实不然。 通过repositories.xml文件我们可以看到&#xff0c;其实这个选项在配置文件中对应的标签是&#xff1a;<hides_hi…

计算机视觉:3*3卷积核的优势

本文重点 如果你了解卷积神经网络,那么你一定会注意到大多数卷积神经网络模型经常使用3*3的卷积核,甚至是1*1的,而5*5的都少用,这是为什么呢?本文对3*3的卷积神经网络的好处进行总结。 参数量少 在卷积神经网络中,卷积核的大小决定了模型的参数量。3*3的卷积核比5*5…

leetcode 102. 二叉树的层序遍历

2023.6.28 二叉树的层序遍历&#xff0c;需要用到的数据结构是队列。有几个核心点&#xff1a; 初始化变量 size&#xff0c;用于记录每层节点的数量。不能直接用que.size()&#xff0c;因为队列的大小是会随时变化的。在内层while循环中&#xff0c;每次先将队头节点的值保存…

HDLbits--Bugs mux4

用二选一多路选择器创建4选一多路选择器 说先修改编译问题&#xff1a;mux0&#xff0c;mux1变量重复使用&#xff0c;并且位宽只有一位&#xff0c;修改后编译 结果&#xff1a; 可知&#xff1a;00-a&#xff0c;01-b,10-c,11-d 可知sel[0]区分a和b&#xff0c;c和d &…

vue2项目Vant组件Dialog 弹出框异步关闭的坑

vue2项目使用vant&#xff0c;我这边是全局引入的&#xff0c;引入插件官方文档中有&#xff0c;这边就不介绍了。 安装&#xff1a;Vant 2 - Mobile UI Components built on Vue 话不多说直接说坑&#xff0c;当时写这个的时候真的给我气到了~~~ 先看一下官方文档&#xff1…

VS2019 Python连接Sql server2008

安好后&#xff1a; 测试代码&#xff1a; import pymssqltry:conn pymssql.connect(host127.0.0.1,usersa,password123456,databasehotel,charsetutf8)# 连接并执行Sql语句cursor conn.cursor()sql select * from odercursor.execute(sql)# 获取数据集rs cursor.fetchal…

【UCOS-III】自我学习笔记→第37讲→内存管理实验

文章目录 前言实验步骤1.复制消息队列工程&#xff0c;并创建OS内存区句柄和内存地址&#xff0c;并删除task2\task3及其相关内容2.修改task1任务函数3.查看串口现象 测试代码工程文件总结 前言 无&#xff0c;仅作记录&#xff0c;不具有参考价值&#xff0c;所用开发板为STM…

记一次docker-compose的坎坷安装经历

最近公司在做一个kafka项目&#xff0c;所以想用docker来安装kafka集群&#xff0c;所以安装完docker后就准备安装docker-compose&#xff0c;但在安装过程中确碰到了各种问题&#xff0c;搞了两个半天再通过翻墙工具才终于搞定。 首先看了篇文章显示安装前要对应docker版本。 …

Spring Boot 中的 @Transactional 注解是什么,原理,如何使用

Spring Boot 中的 Transactional 注解是什么&#xff0c;原理&#xff0c;如何使用 简介 在 Spring Boot 中&#xff0c;Transactional 注解是非常重要的一个注解&#xff0c;用于实现数据库事务的管理。通过使用 Transactional 注解&#xff0c;我们可以很方便地对事务进行控…

用Docker部署Nginx

部署步骤&#xff1a; 1.拉取镜像 docker pull nginx 2.创建并进入容器 docker run -d --name nginx01 -p 3344:80 nginx #注意nginx01是起的名字&#xff0c;3344是公网访问的端口&#xff0c;80是Nginx的默认端口 3.启动Nginx curl localhost:3344 4.在我的windows系统访…

OAuth2:使用Gitee第三方授权

gitee OAuth2文档 1. 配置授权页url 传入client_id&#xff08;创建应用获得&#xff09;、redirect_uri&#xff08;需要通过第三方授权跳转的url&#xff09; https://gitee.com/oauth/authorize?client_id{client_id}&redirect_uri{redirect_uri}&response_type…

ACSNet分割模型搭建

原论文&#xff1a;Adaptive Context Selection for Polyp Segmentation源码&#xff1a;https://github.com/ReaFly/ACSNet. 直接步入正题~~~ 一、基础模块 class ConvBlock(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride, padding):supe…

linux下卸载vmware

linux下卸载vmware 一、卸载二、vmware安装及使用 &emps;如果linux下安装了vmware系列产品&#xff0c;需要卸载或重装的&#xff0c;本文介绍了详细的卸载方法&#xff1a; 一、卸载 一般的发行版都不会带有vmware&#xff0c;所以通常是下载安装包来安装。这里主要说的就…