题解 | #分品种#

题目考察的知识点

  1. 数组的遍历和操作:题目中需要记录每个字符的最后出现位置,我们需要使用一个数组来记录。
  2. 指针的使用:解决该问题需要使用两个指针来维护当前分组的起始位置和结束位置。

题目解答方法的文字分析

  1. 首先,我们创建一个长度为26的数组lastIndices,用于记录每个字符最后出现的位置。遍历字符串s,对每个字符,通过将小写字母转换为0-25之间的数字,将最后出现位置记录在lastIndices数组中。
  2. 接着,我们使用两个指针startend来维护当前分组的起始位置和结束位置。遍历字符串s,对于每个字符,获取其最后出现位置lastIdx,并更新endlastIdx和当前end的最大值。
  3. 当遍历到i等于end时,说明之前的字符都属于同一分组。此时,我们将当前分组的长度end - start + 1添加到结果数组result中,并更新start为当前位置的下一个位置。
  4. 最后,返回结果数组result,其中包含了每个牛名片段的长度。

本题解析所用的编程语言

本题解析使用的是JavaScript编程语言来实现。JavaScript是一种广泛使用的脚本语言,在处理字符串和数组等操作上有丰富的内置函数和方法,非常适合解决本题。

完整且正确的编程代码

function partitionLabels(s) {
  const result = [];
  
  // 记录每个字符最后出现的位置
  const lastIndices = new Array(26).fill(0);
  for (let i = 0; i < s.length; i++) {
    const char = s.charAt(i);
    lastIndices[char.charCodeAt() - 97] = i;
  }
  
  let start = 0;
  let end = 0;
  for (let i = 0; i < s.length; i++) {
    const char = s.charAt(i);
    const lastIdx = lastIndices[char.charCodeAt() - 97];
    
    end = Math.max(end, lastIdx);
    
    if (i === end) {
      result.push(end - start + 1);
      start = i + 1;
    }
  }
  
  return result;
}

// 示例测试
const s = 'abaccdedefgghijjk';
console.log(partitionLabels(s)); // [3, 3, 3, 2, 2, 1]

题解 | 前端刷题 文章被收录于专栏

题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码

全部评论

相关推荐

Atica:笑死了我也收到这个,第一时间还以为是婉拒我,然后一看他把卖课名片推过来大彻大悟
点赞 评论 收藏
分享
羊村懒哥:刚想骂一看是友军对不起
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务