MarcusV(南墙大佬的搬运工)

南墙大佬的CSDN博客地址

导航

Java实现 LeetCode 763 划分字母区间(暴力)

763. 划分字母区间

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

示例 1:

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

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

class Solution {
  public List<Integer> partitionLabels(String S) {
        boolean[] flag = new boolean[S.length()];
        List<Integer> list = new ArrayList<>();
        int begin = 0;
        while(begin<S.length()){
            int end = begin;
            for(int i=begin;i<=end;i++){
                if(flag[i]){
                    continue;
                }
                int last = lastIndex(S, i, flag);
                end = last>end?last:end;
            }
            list.add(end-begin+1);
            begin = end+1;
        }
        return list;
    }
    private int lastIndex(String S, int begin, boolean[] flag){
        int cur = begin, precur = -1;
        while(cur!=-1){
            precur = cur;
            flag[precur] = true;
            cur = S.indexOf(S.charAt(begin), cur+1);
        }
        return precur;
    }
}

posted on 2020-04-16 14:34  MarcusV  阅读(77)  评论(0编辑  收藏  举报