美文网首页
LeetCode 763. 划分字母区间

LeetCode 763. 划分字母区间

作者: 万浩2020 | 来源:发表于2018-08-07 17:33 被阅读0次

    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) {
            char[] ar = S.toCharArray();
            List<Integer> list = new ArrayList<>();
    
            int begin = 0;
            //保存每个字符最后一次出现的位置
            Map<Character,Integer> map = new HashMap<>(ar.length);
            for(int x=0;x<ar.length;x++){
                map.put(ar[x],x);
            }
    
    
            while(begin<ar.length){
    
                int end = map.get(ar[begin]);
                for(int x=begin;x<end;x++){
                    //在范围内
                    if(x<end){
                        end = Math.max(end,map.get(ar[x]));
                    }
    
                }
                list.add(end-begin+1);
                begin = end+1;
    
            }
    
            return list;
            
        }
    }
    

    总结

    *灵活使用map来解决问题

    反馈与建议

    相关文章

      网友评论

          本文标题:LeetCode 763. 划分字母区间

          本文链接:https://www.haomeiwen.com/subject/dgvavftx.html