题解 | #分品种#

分品种

https://www.nowcoder.com/practice/9af4e93b04484df79d4cc7a863343b0b

知识点:贪心

题目要求每组之间的字母不能相同,也就是要将相同的字母放在同一组中,所以我们要找到每一个字母所能达到的最远距离,从第一个字母开始,我们需要遍历至第一个字母出现的最远的位置,同时,若遍历过程中出现其他字母,则也需要将其相同的字母包含其中,也就是要选择出现的字母中所能达到的最远距离。当达到最远距离时,将其归为一组,重复以上步骤,直至将所有字符分组。

Java题解如下

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型一维数组
     */
    public int[] partitionLabels (String s) {
        // write code here
        List<Integer> list = new ArrayList<>();
        Map<Character, Integer> map = new HashMap<>();
        int n = s.length();
        for(int i = 0; i < n; i++) {
            map.put(s.charAt(i), i);
        }
        for(int i = 0; i < n; i++) {
            int start = i;
            int end = map.get(s.charAt(i));
            while(i < end) {
                end = Math.max(end, map.get(s.charAt(i++)));
            }
            list.add(end - start + 1);
        }
        int[] res = new int[list.size()];
        for(int i = 0; i < list.size(); i++) {
            res[i] = list.get(i);
        }
        return res;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务