当前位置: 首页 > news >正文

【力扣hot100题】(079)划分字母区间

感觉智商又回来了(松气)。

方法大概是先建立哈希表遍历数组记录每一个字母位置的跨度,然后再遍历数组,每次遇到跨度大于目前长度的字母,就将目前长度延申跨度的长度,然后继续遍历,知道位置已经到长度了,就将长度放入结果容器,将长度重置为1,起始位置重置为下一个字符,继续这些操作。

class Solution {
public:
    vector<int> partitionLabels(string s) {
        vector<int> result;
        unordered_map<char,pair<int,int>> dictionary;
        for(int i=0;i<s.size();i++){
            if(dictionary.find(s[i])==dictionary.end()) dictionary[s[i]]=make_pair(i,i);
            else dictionary[s[i]].second=i;
        }
        int start=0;
        int r=1;
        for(int i=0;i<s.size();i++){
            if(dictionary[s[i]].second>start+r-1){
                r+=dictionary[s[i]].second-start-r+1;
            }
            if(i+1==r+start){
                result.push_back(r);
                start=i+1;
                r=1;
            }
        }
        return result;
    }
};

其实不需要哈希表,用一个数组记录就可以了,而且也不需要记录起始位置和跨度(写完才发现并没有用上),记录每个字母的最后一个位置就可以了。

class Solution {
public:
    vector<int> partitionLabels(string s) {
        vector<int> result;
        int dic[26];
        memset(dic,0,sizeof(dic));
        for(int i=0;i<s.size();i++) dic[s[i]-'a']=i;
        int start=0;
        int r=1;
        for(int i=0;i<s.size();i++){
            if(dic[s[i]-'a']>start+r-1){
                r+=dic[s[i]-'a']-start-r+1;
            }
            if(i+1==r+start){
                result.push_back(r);
                start=i+1;
                r=1;
            }
        }
        return result;
    }
};

http://www.dtcms.com/a/122512.html

相关文章:

  • vue3.2 +vxetable4.6 渲染大数据列,出现错乱问题处理方案
  • BabelDOC ,开源的 AI PDF 翻译工具
  • 20250409-大数据-python数据处理平台/接口平台(DFF)
  • 基于cartographer 1.0.0 不使用ros 使用激光雷达数据和IMU数据融合实现的建图
  • Redis的Spring客户端的使用
  • Android系统深度定制:源码级拦截adb install的完整解决方案
  • Windows 11 家庭中文版 安装docker desktop 无法开启自启动问题处理
  • matlab内置的git软件版本管理功能
  • CSS AI 通义灵码 VSCode插件安装与功能详解
  • MySQL学习笔记十四
  • 安徽京准:NTP网络时钟服务器功能及同步模式的介绍
  • oracle将varchar2 转为clob类型存储。 oracle不支持直接使用sql,将 varchar2 到clob的类型转换,需要下面操作
  • Java + WebAssembly 2025:如何用Rust优化高性能Web应用?
  • proteus OLED12864仿真
  • centos 安装python3.9.9
  • Jupyter Lab 无法启动 Kernel 问题排查与解决总结
  • 山东大学软件学院项目创新实训开发日志(8)之数据库建表
  • 从响应式编程到未来架构革命:解锁高并发时代的底层思维范式
  • MySQL日期时间类型详解:DATE、TIME和DATETIME的用法与区别
  • 【Ansible自动化运维】二、Playbook 深入探究:构建复杂自动化流程
  • idea插件:AICommit,智能生成Git提交信息
  • 停车场管理系统带万字文档基于Springboot+Vue的前后端分离停车场管理系统Springboot项目java项目java课程设计java毕业设计
  • Open Scene Graph 3D到2D坐标转换
  • 【数据库原理及安全实验】实验二 数据库的语句操作
  • 【软件测试】自动化测试框架Pytest + Selenium的使用
  • Ubuntu 24.04启用root账户
  • Hi168云平台部署Ansible学习环境
  • Mysql(继续更新)
  • linux入门三:Linux 编辑器
  • 查看手机在线状态,保障设备安全运行