首页 > 其他分享 >刷刷刷 Day 36 | 763. 划分字母区间

刷刷刷 Day 36 | 763. 划分字母区间

时间:2023-02-25 16:33:19浏览次数:49  
标签:片段 int 763 字母 位置 36 划分 cs Day

763. 划分字母区间

LeetCode题目要求

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。

返回一个表示每个字符串片段的长度的列表。

示例

输入:s = "ababcbacadefegdehijhklij"
输出:[9,7,8]
解释:
划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。 

##### 解题思路
划分字符串
s = 'ababcbacadefegdehijhklij'
从前往后遍历,找到之前遍历过的所有字母的边界,就找到了分隔点
因为题目给的要求是:s 仅由小写英文字母组成,那么我们利用一个 int 数组,来存储每个字符出现的最远位置
然后再遍历 s 的时候与位置做对比,从而找出最远位置的子串

上代码

class Solution {
public List partitionLabels(String s) {

    List<Integer> res = new ArrayList<>();

    char[] cs = s.toCharArray();
    
    // 记录每个字母最后一次出现的问题
    int[] ci = new int[26];
    for (int i = 0; i < cs.length; i++) {
        ci[cs[i] - 'a'] = i;
    }

    // 字符索引位置
    int charIndex = 0;
    int last = -1;
    for (int i = 0; i < cs.length; i++) {
        // 当前字符位置与 本字符位置最远位置 取最大值
        charIndex = Math.max(charIndex, ci[cs[i] - 'a']);
        // 当:当前字符位置正好是最远位置,就放入结果
        if (i == charIndex) {
            res.add(i - last);
            last = i;
        }
    }
    return res;
}

}

##### 重难点
附:[学习资料链接](https://programmercarl.com/0763.%E5%88%92%E5%88%86%E5%AD%97%E6%AF%8D%E5%8C%BA%E9%97%B4.html)

标签:片段,int,763,字母,位置,36,划分,cs,Day
From: https://www.cnblogs.com/blacksonny/p/17154713.html

相关文章

  • B3612 【深进1.例1】求区间和
    【深进1.例1】求区间和题目描述给定$n$个正整数组成的数列$a_1,a_2,\cdots,a_n$和$m$个区间$[l_i,r_i]$,分别求这$m$个区间的区间和。输入格式共$n+m+2$......
  • 《分布式技术原理与算法解析》学习笔记Day22
    哈希与一致性哈希在分布式系统中,哈希和一致性哈希是数据索引或者数据分布的常见实现方式。数据分布设计原则在分布式数据存储系统中,做存储方案选型时,一般会考虑以下因素......
  • Day 24 24.1:逆向分析1 - Steam案例
    STEAM逆向分析url:https://store.steampowered.com/login/?redir=&redir_ssl=1分析思路:输入用户名和密码后,点击登录按钮,通过抓包工具捕获点击登录按钮后发起请求对......
  • #373. 「USACO1.1」Friday the Thirteenth 题解
    #373.「USACO1.1」FridaytheThirteenth题解题目传送门题目知识点模拟+数学闰年知识点题意说明写一个程序来计算在n年里13日落在星期一,星期二......星期日的次数......
  • 题解 LOJ P2393 「JOISC 2017 Day 2」门票安排
    题意咕咕咕。题解这题太神了,无限膜拜p_b_p_b,搬运一波题解。首先考虑二分。题意等价于选一些区间进行反转。首先注意到反转的区间两两有交,不然不反转一定更优。设反转......
  • day02-面向对象高级2-接口&多态
    1,final关键字1,认识finalfinal关键字最终的意思,可以用来修饰(类,方法,变量)特点:修饰类类不能被继承修饰方法,方法不能被子类重写修饰变量,该变量只能被赋值一次final修......
  • 路飞项目day01
    企业项目类型软件开发流程pip永久换源虚拟环境路飞项目前后端创建包导入后端项目调整目录#技术类博客-cnblogs-csdn(不推荐)-掘金......
  • 谷粒学院day05笔记
    讲师管理前端开发首先,把后台管理系统登录改到本地(临时)后面添加权限框架springsecuritynetwork->login->requesturl->修改为本地localhostdev.env.js->B......
  • 路飞day_02
    目录今日内容详细一、企业项目类型二、软件开发流程三、路飞项目需求四、pip永久换源五、虚拟环境六、路飞项目前后端创建七、包导入八、后端项目调整目录今日内容详细一......
  • 路飞项目day01 软件开发流程、PIP永久换源、虚拟环境、路飞项目开始
    一、软件开发流程(重要)​ 我们作为一个后端,虽然一般情况下只专注自己的那一部分事情,但是有时候小公司,人员架构没那么细化,或者老板就是想省钱少招点人,我们就得大致熟悉软件......