网站建设 技术团队介绍,装修平台加盟,成都网站建设设计公司,php做网站有哪些优点文章目录 前言1、问题2、示例3、解决方法#xff08;1#xff09;方法1——双指针 总结 前言
提示#xff1a; 1、问题 给定两个字符串 s 和 p#xff0c;找到 s 中所有 p 的 异位词 的子串#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字… 文章目录 前言1、问题2、示例3、解决方法1方法1——双指针 总结 前言
提示 1、问题 给定两个字符串 s 和 p找到 s 中所有 p 的 异位词 的子串返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串包括相同的字符串。 2、示例 示例 1: 输入: s “cbaebabacd”, p “abc” 输出: [0,6] 解释: 起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。 起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。 示例 2: 输入: s “abab”, p “ab” 输出: [0,1,2] 解释: 起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。 起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。 3、解决方法
1方法1——双指针
let s cbaebabacd, p abc
var findAnagrams function(s, p) {// 1-1: 定义左右指针注意右指针和传入字符串p的长度相等let left 0; right p.length; // 找到异味的子串长度要和p的长度一样let arr []; // 1-2 定义返回的数组 let temp ; // 1-3接收根据左右指针切割后的字符串// 2: 判断右指针是否小于等于s字符串的长度注意点小于等于因为右指针最大是会为s字符串长度的否则如示例2只会返回[0,1]while(right s.length){// 3:总体就是把切割后的字符串进行排序就是排序过程是变成数组排序后变为字符串较为复杂可以优化temp s.slice(left, right) // 3-1: 获取根据左右指针切割的字符串let tempArray temp.split(); // 3-2 将切割的字符串变成数组tempArray.sort(); // 3-3: 将切割和p一样长度的子串排序temp tempArray.join(); // 3-4 将排序后的数组变为字符串// 4: 如果排序后的字符串和p相等即符合条件将开始下标插入到数组中if(temp p){arr.push(left); // 如果切割的子串和p相等添加p的下标}// 5: 由于切割的子串长度固定p的长度所以左右指针的长度同步增加left;right;}console.log(arr, arr); // 6: 返回结果的数组
};
findAnagrams(s, p)总结 1难度 中等 2注意点右指针的长度要 小于等于 s字符串的长度不然如示例2中的效果就是[0,1]会少个下标为2的效果。 3其他由于和每天一道算法题八——找出字符串中无重复字符的最长子串这题的思路一样15分钟就写出来了一样的思路感觉为贼强哈哈哈。。。