8.14划分字母区间(LC763-M)(附.length,.length(),.size()使用原理)

本文介绍了如何在Java中使用算法遍历字符串,找到分割点并将每个子串的边界存储在LinkedList中,同时解释了代码中的关键细节,如使用LinkedList而非int、字符数组操作以及时间空间复杂度的分析。
摘要由CSDN通过智能技术生成

算法:

在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了

此时前面出现过所有字母,最远也就到这个边界了。

步骤:

  1. 统计每一个字符最后出现的位置
  2. 从头遍历字符,
  3. 并更新字符的最远出现下标,
  4. 如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

正确代码:

class Solution {
    public List<Integer> partitionLabels(String s) {
        LinkedList<Integer> result = new LinkedList<>();
        char[] chars = s.toCharArray();
        int[] location = new int[26];
        int index = 0;
        int last = -1;
        //统计每个字母出现的位置(对应的索引值)
        for (int i=0; i < chars.length;i++){
            location[chars[i]-'a'] = i;//记录每个字母最后出现的索引值
        }
        for (int i=0; i < chars.length;i++){
            //更新字符的最远出现下标
            index = Math.max(index,location[chars[i]-'a']);
            //如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
            if (index == i){
                result.add(index-last);
                last = i;
            }
        }
        return result;


    }
}

注意:

1.LinkedList<Integer> result = new LinkedList<>(); 要写Integer,不能写int!

在 Java 中,`Integer` 是一个类,而 `int` 是一个原始数据类型。如果想要创建一个存储整数的链表,需要使用 `Integer` 而不是 `int`这是因为泛型不支持使用原始数据类型。

2.char[] chars = s.toCharArray(); char[]      c要小写!

3.chars.length,不能写chars.length()

(1)对于数组(如 `int[]``char[]` 等),应该使用 `.length` 来获取数组的长度,因为数组是一个对象,它具有一个公共字段来存储其长度。(属性)
int[] numbers = {1, 2, 3, 4, 5};  
int length = numbers.length;
(2)对于字符串(如 `String` 对象),应该使用 `.length()` 方法来获取字符串的长度,因为字符串是一个对象,它具有一个 `length()` 方法来返回其字符序列的长度。(方法)
String str = "Hello, World!";  
int length = str.length();  
(3)`.size()` 方法通常用于集合类(如 `List``Set``Map` 等),以获取它们所包含元素的数量。

举例来说,对于 `ArrayList``LinkedList``HashSet``TreeSet` 等集合类,你应该使用 `.size()` 方法来获取它们所包含元素的数量。

ArrayList<String> list = new ArrayList<>();  
int size = list.size();  

另外,对于 `Map` 接口的实现类(如 `HashMap``TreeMap` 等),也可以使用 `.size()` 方法来获取它们所包含的键值对的数量。

HashMap<String, Integer> map = new HashMap<>();  
int size = map.size();  

时间空间复杂度:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1),使用的hash数组是固定大小
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值