题解 | #分品种#
题目考察的知识点
- 数组的遍历和操作:题目中需要记录每个字符的最后出现位置,我们需要使用一个数组来记录。
- 指针的使用:解决该问题需要使用两个指针来维护当前分组的起始位置和结束位置。
题目解答方法的文字分析
- 首先,我们创建一个长度为26的数组
lastIndices
,用于记录每个字符最后出现的位置。遍历字符串s
,对每个字符,通过将小写字母转换为0-25之间的数字,将最后出现位置记录在lastIndices
数组中。 - 接着,我们使用两个指针
start
和end
来维护当前分组的起始位置和结束位置。遍历字符串s
,对于每个字符,获取其最后出现位置lastIdx
,并更新end
为lastIdx
和当前end
的最大值。 - 当遍历到
i
等于end
时,说明之前的字符都属于同一分组。此时,我们将当前分组的长度end - start + 1
添加到结果数组result
中,并更新start
为当前位置的下一个位置。 - 最后,返回结果数组
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]
题解 | 前端刷题 文章被收录于专栏
题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码