leetcode438:找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
问题分解
- 异位词判断
- 用给定长度的字符串,在目标字符串中搜索
- 循环字符串
- str.slice(i, i + p.length) 来截取目标长度的
自己的实现
/**
* @param {string} s
* @param {string} p
* @return {number[]}
*/
var s = "cbaebabacd",
p = "abc";
// 异位词判断
function isYyc(s1, s2) {
var s11 = s1.split("").sort().join("");
var s22 = s2.split("").sort().join("");
return s11 === s22;
}
// 统计
function stat(s, p) {
var res = [];
var len = p.length;
for (var i = 0; i < s.length; i++) {
var cur = s.slice(i, i + len);
if (isYyc(cur, p)) {
res.push(i);
}
}
return res;
}
console.log(stat(s, p)); //[0,6]
异位词判断
- 思路1:先把字符串排序,再比较
- str.split()
- arr.sort()
- arr.join()
- 思路2:每个char相加,他们的值合相同
- 'a'.charCodeAt();
- sum('abc')
参考
https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/