zoukankan      html  css  js  c++  java
  • leetcode 830 较大分组的位置

    package com.example.lettcode.dailyexercises;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Class LargeGroupPositions
     * @Description 830 较大分组的位置
     * 在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。
     * 例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
     * 分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。
     * 上例中的 "xxxx" 分组用区间表示为 [3,6] 。
     * 我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
     * <p>
     * 找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
     * <p>
     * 示例 1:
     * 输入:s = "abbxxxxzzy"
     * 输出:[[3,6]]
     * 解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。
     * <p>
     * 示例 2:
     * 输入:s = "abc"
     * 输出:[]
     * 解释:"a","b" 和 "c" 均不是符合要求的较大分组。
     * <p>
     * 示例 3:
     * 输入:s = "abcdddeeeeaabbbcd"
     * 输出:[[3,5],[6,9],[12,14]]
     * 解释:较大分组为 "ddd", "eeee" 和 "bbb"
     * <p>
     * 示例 4:
     * 输入:s = "aba"
     * 输出:[]
     * <p>
     * 提示:
     * 1 <= s.length <= 1000
     * s 仅含小写英文字母
     * @Author
     * @Date 2021/1/5
     **/
    public class LargeGroupPositions {
        public static List<List<Integer>> largeGroupPositions(String s) {
            if (s == null || s.length() < 3) return new ArrayList<>();
    
            List<List<Integer>> resLists = new ArrayList<>();
            int start = 0, end = 1;
            char ch = s.charAt(start);
            for (int i = 1; i < s.length(); i++) {
                if (s.charAt(i) == ch) {
                    end = i + 1;
                } else {
                    if (end - start >= 3) {
                        List<Integer> integers = new ArrayList<>();
                        integers.add(start);
                        integers.add(end - 1);
                        resLists.add(integers);
                    }
                    start = i;
                    end = i + 1;
                    ch = s.charAt(start);
                }
            }
            // 最后一个较大分组
            if (end - start >= 3) {
                List<Integer> integers = new ArrayList<>();
                integers.add(start);
                integers.add(end-1);
                resLists.add(integers);
            }
            return resLists;
        }
    }
    
    // 测试用例
    public static void main(String[] args) {
    	String s = "abbxxxxzzy";
    	List<List<Integer>> ansLists = largeGroupPositions(s);
    	System.out.print("LargeGroupPositions demo01 result : [");
    	for (List<Integer> integers : ansLists) {
    		System.out.print("[" + integers.get(0) + "," + integers.get(1) + "]");
    	}
    	System.out.println("]");
    
    	s = "abc";
    	ansLists = largeGroupPositions(s);
    	System.out.print("LargeGroupPositions demo02 result : [");
    	for (List<Integer> integers : ansLists) {
    		System.out.print("[" + integers.get(0) + "," + integers.get(1) + "]");
    	}
    	System.out.println("]");
    
    	s = "abcdddeeeeaabbbcd";
    	ansLists = largeGroupPositions(s);
    	System.out.print("LargeGroupPositions demo03 result : [");
    	for (List<Integer> integers : ansLists) {
    		System.out.print("[" + integers.get(0) + "," + integers.get(1) + "]");
    	}
    	System.out.println("]");
    
    	s = "aba";
    	ansLists = largeGroupPositions(s);
    	System.out.print("LargeGroupPositions demo04 result : [");
    	for (List<Integer> integers : ansLists) {
    		System.out.print("[" + integers.get(0) + "," + integers.get(1) + "]");
    	}
    	System.out.println("]");
    
    	s = "abaaaa";
    	ansLists = largeGroupPositions(s);
    	System.out.print("LargeGroupPositions demo05 result : [");
    	for (List<Integer> integers : ansLists) {
    		System.out.print("[" + integers.get(0) + "," + integers.get(1) + "]");
    	}
    	System.out.println("]");
    
    	s = "aaa";
    	ansLists = largeGroupPositions(s);
    	System.out.print("LargeGroupPositions demo06 result : [");
    	for (List<Integer> integers : ansLists) {
    		System.out.print("[" + integers.get(0) + "," + integers.get(1) + "]");
    	}
    	System.out.println("]");
    }
    
  • 相关阅读:
    线段树专辑—— pku 1436 Horizontally Visible Segments
    线段树专辑——pku 3667 Hotel
    线段树专辑——hdu 1540 Tunnel Warfare
    线段树专辑—— hdu 1828 Picture
    线段树专辑—— hdu 1542 Atlantis
    线段树专辑 —— pku 2482 Stars in Your Window
    线段树专辑 —— pku 3225 Help with Intervals
    线段树专辑—— hdu 1255 覆盖的面积
    线段树专辑—— hdu 3016 Man Down
    Ajax跨域访问
  • 原文地址:https://www.cnblogs.com/fyusac/p/14236102.html
Copyright © 2011-2022 走看看