wordpress rewirte,台州网站搜索优化,动画设计实训报告,温州微网站制作公司电话文章目录1. 题目描述2. 思路3. 代码1. 题目描述 给定两个字符串 s 和 p#xff0c;找到 s 中所有 p 的 异位词 的子串#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s “cbaebabacd”, p “abc” 输出: [0,6] 解释: 起始索引等于 0 的子串是…文章目录1. 题目描述2. 思路3. 代码1. 题目描述给定两个字符串 s 和 p找到 s 中所有 p 的 异位词 的子串返回这些子串的起始索引。不考虑答案输出的顺序。示例 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” 的异位词。起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。提示:1 s.length, p.length 3 * 104s 和 p 仅包含小写字母2. 思路如果p的长度比s长度大就说明不存在异位词。异位词排序后都是相同的可以利用这个特点作比较如果排序后相同就可以判定为是异位词。以p的长度作为滑动窗口的大小将字母转为数字以滑动窗口的大小进行比较逐渐将窗口往后移3. 代码方法一排序比较子串publicListIntegerfindAnagrams(Strings,Stringp){intsLens.length();intpLenp.length();if(sLenpLen){returnnewArrayListInteger();}ListIntegerresultnewArrayList();char[]pListp.toCharArray();Arrays.sort(pList);StringtargetnewString(pList);for(inti0;isLen-pLen;i){Stringnows.substring(i,ipLen);char[]nowListnow.toCharArray();Arrays.sort(nowList);StringsubstringnewString(nowList);if(substring.equals(target)){result.add(i);}}returnresult;}优点通俗易懂缺点每个子串都需要排序作比较性能较低方法二滑动窗口publicListIntegerfindAnagrams2(Strings,Stringp){intsLens.length();intpLenp.length();ListIntegerresultnewArrayList();if(sLenpLen){returnresult;}int[]sListnewint[26];int[]pListnewint[26];for(inti0;ipLen;i){sList[s.charAt(i)-a];pList[p.charAt(i)-a];}if(Arrays.equals(sList,pList)){result.add(0);}//滑动窗口以p的长度为滑动窗口的大小从左往右移动窗口for(inti0;isLen-pLen;i){// 去掉窗口左边的字符sList[s.charAt(i)-a]--;// 加入窗口右边的字符sList[s.charAt(ipLen)-a];if(Arrays.equals(sList,pList)){result.add(i1);}}returnresult;}以上为个人学习分享如有问题欢迎指出