题解 | #分品种#

题目考察的知识点

  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]

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

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

全部评论

相关推荐

06-25 21:00
门头沟学院 Java
多拆解背记一下当前的高频场景面试题,结合自己的项目经历去作答,面试通过率原来真的不会低!
牛客965593684号:小公司不就是这样的吗,面试要么是点击就送,要么就是往死里拷打,没有一个统一的标准。这个不能代表所有公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务