Algorithm
本周的算法题为 438. 找到字符串中所有字母异位词
给定两个字符串 s
和 p
,找到 s
中所有 p
的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
示例 1:
输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
实现代码如下:
const findAnagrams = function (s, p) {
if (p.length > s.length) {
return [];
}
let pCount = new Array(26).fill(0);
let sCount = new Array(26).fill(0);
let result = [];
for (let char of p) {
pCount[char.charCodeAt(0) - 'a'.charCodeAt(0)] += 1;
}
for (let i = 0; i < p.length; i++) {
sCount[s.charCodeAt(i) - 'a'.charCodeAt(0)] += 1;
}
if (isEqual(pCount, sCount)) {
result.push(0);
}
for (let i = p.length; i < s.length; i++) {
sCount[s.charCodeAt(i - p.length) - 'a'.charCodeAt(0)] -= 1;
sCount[s.charCodeAt(i) - 'a'.charCodeAt(0)] += 1;
if (isEqual(pCount, sCount)) {
result.push(i - p.length + 1);
}
}
function isEqual(count1, count2) {
for (let i = 0; i < 26; i++) {
if (count1[i] !== count2[i]) {
return false;
}
}
return true;
}
return result;
};
解题思路:
创建pCount
和sCount
字母表,通过一个字母的Unicode
编码减去字母a的Unicode
编码,得到其在字母表中的位置,并且将其计数,通过滑动窗口,左减右加,最后通过对比相同位置计数是否相等,来确定是否是字母异位词。
Review
Eye colour change is riskiest cosmetic surgery - Breaking News English Lesson
全世界越来越多的人选择整容手术来提升他们的容貌。潜在患者可能不知道的是,改变眼睛颜色的手术是风险最大的。在线眼镜店 Overnight Glasses 进行的研究断言,眼部颜色手术有92%的可能性出现并发症。眼睛颜色变化在研究人员最危险的整容手术名单中名列前茅。此类手术包括虹膜植入物和激光色素去除。还有一个称为角膜色素沉着的程序。这是一种永久性的眼睛颜色变化,其中使用精密激光技术将特殊的着色剂插入眼睛中。
今年早些时候,美国眼科学会发布了对眼睛变色手术的警告。Ashley Brissette 博士强调了可能出错的事情。这些包括染料泄漏、过敏反应、感染、对光敏感、可能导致混浊或视力丧失的角膜损伤,以及最终失明。她说:“我们用眼睛做的任何事情,都必须非常非常小心。研究人员表示,恢复时间可能长达两个月,手术的平均费用为 12,000 美元。眼科医生 Nicole Bajic 建议戴彩色隐形眼镜,而不是动刀。她说,“可以给你你想要的外观,而不会危及你的眼睛健康”。
Tip
在使用npm i
命令给项目安装依赖时,出现卡住的情况,等了好久,也没见成功或者中断,这就无法入手去解决问题。使用命令npm install --verbose
可以看到安装的更多信息,便于排查问题。
Share
“珍惜现在,就是穿越时空。”