zoukankan      html  css  js  c++  java
  • 划分字母区间【763】

    字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

    示例 1:

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

    提示:

    • S的长度在[1, 500]之间。
    • S只包含小写字母 'a' 到 'z' 。

    思路

    思路解析:当前取的片段不难看出都是某个字段的最后一个值,所以我们先把最后一个值得下标保存起来,因为每个字母要求最多出现在一个片段中,这里我们设置开始begin=0,
    从第一个开始,截止字段为last,设置最后的断点值,当last==j时,j前的所有字符都在该片段中j就是断点,剩下的就是判断字段长度了,last - begin + 1,j + 1代表从
    当前位置的下一个开始,继续比对
    

    代码

    class Solution {
        public List<Integer> partitionLabels(String S) {
    
            List<Integer> count = new ArrayList();
            char[] chars = S.toCharArray();
            Map<Character, Integer> map = new HashMap();
            int leng = chars.length;
    
            for(int i =0; i < leng; i++){
                map.put(chars[i], i);    
            }
    
            int last = -1;
            int begin = 0;
    
            for(int j = 0; j < leng; j++){
                char c = chars[j];
                if(map.get(c)>last){
                    last = map.get(c);
                }
                if(last == j){
                    count.add(last - begin + 1);
                    begin = j + 1;
                }
            }
            return count;
        }
    }
    
  • 相关阅读:
    数据分析05 /pandas的高级操作
    ABP之应用服务(2)
    ABP之应用服务(1)
    ABP之仓储
    ABP之创建实体
    ABP之框架体系
    ABP之项目的搭建
    2018年,加油!!!
    WF的简单使用
    WCF之通信工厂的简单使用
  • 原文地址:https://www.cnblogs.com/snail-gao/p/13861862.html
Copyright © 2011-2022 走看看