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

《LeetCode 763. 划分字母区间 | 高效分割字符串》

内容:

问题描述
给定一个字符串 S,将字符串分割成若干个子串,使得每个子串中的字符都不重复,并且返回每个子串的长度。

解题思路

  1. 找到每个字符最后一次出现的位置:我们首先遍历一遍字符串,记录下每个字符最后出现的索引。这帮助我们确定哪些字符必须出现在同一个子串中。

  2. 逐步确定每个子串的边界:然后我们通过遍历字符串,在遍历的过程中,我们会不断更新当前子串可能扩展到的最远位置(end),直到当前遍历到的位置 iend 相等时,说明从 starti 的这一段可以独立成一部分,加入答案。

代码实现

class Solution {
    public List<Integer> partitionLabels(String S) {
        char[] s = S.toCharArray();
        int n = s.length;
        int[] last = new int[26];
        
        // 记录每个字符最后出现的位置
        for (int i = 0; i < n; i++) {
            last[s[i] - 'a'] = i;
        }
        
        List<Integer> ans = new ArrayList<>();
        int start = 0, end = 0;
        
        // 遍历字符串,确定每个子串的边界
        for (int i = 0; i < n; i++) {
            end = Math.max(end, last[s[i] - 'a']);
            if (end == i) {
                ans.add(end - start + 1);
                start = i + 1;
            }
        }
        return ans;
    }
}

时间复杂度分析

  • 时间复杂度为 O(n),其中 n 是字符串 S 的长度。遍历一次字符串,时间复杂度是线性的。

空间复杂度分析

  • 空间复杂度为 O(1),除了输入输出之外,我们只使用了常数大小的空间(last 数组)。

总结
这道题考察了字符串分割和字符定位的能力,通过记录每个字符最后出现的位置,能够有效地确定分割点,并在 O(n) 时间内完成问题的解决。通过这种方法,我们可以高效地解决类似的问题。

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

相关文章:

  • linux-5.10.110内核源码分析 - bcm2711 pcie BAR地址分配
  • 牛客寒假训练营3
  • 芯片引脚描述或电路原理图中的Ipd、Ipu是什么意思?
  • fps武器系统6:随机弹道
  • vLLM专题(四)-故障排除
  • vue中如何动态的增减组件的类名(class)
  • OpenPose
  • 计算机世界的寻宝游戏:用C语言解密五大查找算法
  • 数据仓库与数据湖的协同工作:智慧数据管理的双引擎
  • 类和对象(5)——抽象类和接口
  • 云存储:云计算储存
  • 安卓设备调试h5页面(调试)
  • 量化交易入门指南
  • 《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》-配套代码示例
  • 位运算,双指针,二分,排序算法
  • WeMos D1+PIR+Android 的小场景制作
  • freertos源码分析DAY12 (软件定时器)
  • 【第14章:神经符号集成与可解释AI—14.1 神经符号AI系统的基本原理与实现方法】
  • 一款简单的弹窗打赏页HTML源码
  • python入门详解
  • EasyRTC智能硬件:小体积,大能量,开启音视频互动新体验
  • ORB-SLAM3的源码学习: Settings.cc:Settings::readCamera1/readCamera2 从配置文件中加载相机参数
  • 【信息学奥赛一本通 C++题解】1282:最大子矩阵
  • Linux 文件与目录命令学习记录
  • 语音识别中的MFCC特征提取:时频分析如何转化为机器可理解的声学参数?(附完整代码实现)
  • Python常见面试题的详解7
  • Python爬虫系列教程之第四篇:数据存储与管理
  • Kubernetes-node(节点) 组件
  • Java 包装类详解
  • 04运维实用篇(D4_日志)