大连网站关键词排名西安公关公司
大连网站关键词排名,西安公关公司,网站框架与内容,iis6.0新发布网站访问速度慢给定两个字符串 s 和 p#xff0c;找到 s 中所有 p 的 异位词 的子串#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串#xff08;包括相同的字符串#xff09;。
示例 1:
输入: s cbaebabacd, 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 仅包含小写字母
题解
一开始是想用两层循环先将p排序一次然后将s中每个和p一样长的子串拿出来重新排序之后和p比较是否相同但是这种做法会超时
于是采用了官方的解法官方的做法有两个优点一个是利用了滑动窗口另一个是将判断异位词转换成判断每个字母出现的次数是否相同这个确实是最快判断是否是由相同字母组成的字符串的方法
class Solution {
public:vectorint findAnagrams(string s, string p) {vectorintanswer;int sLengths.size(),pLengthp.size();if(sLengthpLength){ // 如果s短于p后面无法放置窗口return {};}vectorintss(26),pp(26); // 记录字母出现次数for(int i0;ipLength;i){ // 放置滑动窗口ss[s[i]-a];pp[p[i]-a];}if(sspp)answer.emplace_back(0);for(int i0;isLength-pLength;i){ss[s[i]-a]--; // 滑动窗口移动去掉前一个字母的状态ss[s[ipLength]-a]; // 滑动窗口移动增加后一个字母的状态if(sspp)answer.emplace_back(i1);}return answer;}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89752.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!