zoukankan      html  css  js  c++  java
  • 763. Partition Labels

    A string S of lowercase English letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing the size of these parts.

    Example 1:

    Input: S = "ababcbacadefegdehijhklij"
    Output: [9,7,8]
    Explanation:
    The partition is "ababcbaca", "defegde", "hijhklij".
    This is a partition so that each letter appears in at most one part.
    A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits S into less parts.
    

    Note:

    • S will have length in range [1, 500].
    • S will consist of lowercase English letters ('a' to 'z') only.
    class Solution {
        public List<Integer> partitionLabels(String S) {
                if(S == null || S.length() == 0){
                    return null;
                }
                List<Integer> list = new ArrayList<>();
                int[] map = new int[26];  // record the last index of the each char
    
                for(int i = 0; i < S.length(); i++){
                    map[S.charAt(i)-'a'] = i;
                }
                // record the end index of the current sub string
                int last = 0;
                int start = 0;
                for(int i = 0; i < S.length(); i++){
                    last = Math.max(last, map[S.charAt(i)-'a']);
                    if(last == i){
                        list.add(last - start + 1);
                        start = last + 1;
                    }
                }
                return list;
            }
    }

    叹气,明明这么简单

  • 相关阅读:
    流 例题

    容器集合整理
    容器集合
    容器 集合知识点
    面向对象回顾
    面向对象例题
    Java常用的8大排序算法
    Java中两个动态代理
    为什么synchronized无法禁止指令重排,却能保证有序性
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13616872.html
Copyright © 2011-2022 走看看