leetcode438:找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
更新于: 2021-12-19 12:57:29

异位词

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

 

问题分解

  1. 异位词判断
  2. 用给定长度的字符串,在目标字符串中搜索
    1. 循环字符串
    2. 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. 思路1:先把字符串排序,再比较
    1. str.split()
    2. arr.sort()
    3. arr.join()
  2. 思路2:每个char相加,他们的值合相同
    1. 'a'.charCodeAt(); 
    2. sum('abc')

参考

https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/