找到字符串中所有字母异位词--滑动窗口
2023-12-23 19:16:59
?个人主页:Lei宝啊?
愿所有美好如期而遇
本体题目链接https://leetcode.cn/problems/VabMRr/description/
算法原理?
滑动窗口其实就是种双指针,只是这种双指针只向后移动,不会回退,具有单调性,也就是说,整个过程中left和right只会++。?
本题思路我们通过图示来明晰。
图示
?
?
后面不再画。?
代码
class Solution
{
public:
vector<int> findAnagrams(string s, string p)
{
vector<int> v;
vector<int> hash1(26);
vector<int> hash2(26);
for(int i=0; i<p.size(); i++)
{
hash2[p[i]-97]++;
}
int count = 0;
for(int rhs = 0, lhs = 0; rhs < s.size(); rhs++)
{
int ra = s[rhs]-97;
int rb = s[lhs]-97;
//进窗口
hash1[ra]++;
//判断
//进窗口的对应位置的字符的数量小于等于hash2中对应位置的字符数量,有效字符数++
if(hash1[ra] <= hash2[ra])
{
count++;
}
int len = rhs - lhs + 1;
while(len > p.size())
{
//出的数据是有效字符时,我们count--
if(hash1[rb] <= hash2[rb])
{
count--;
}
//出窗口
hash1[rb]--;
len--;
lhs++;
}
if(count == p.size()) v.push_back(lhs);
}
return v;
}
};
文章来源:https://blog.csdn.net/m0_74824254/article/details/135171029
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!