https://leetcode-cn.com/problems/permutation-in-string/
题意:
给定两个字符串
s1
和s2
,写一个函数来判断s2
是否包含s1
的排列。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
方法:使用两张哈希表+窗口滑动
class Solution {
public:
bool checkInclusion(string s1, string s2) {
unordered_map<char,int> mp1;
unordered_map<char,int> mp2;
for(int i=0;i<26;i++)
{
mp1[i+'a'] = 0;//初始化
mp2[i+'a'] = 0;//哈希表初始化
}
for(auto &ch:s1)
{
mp1[ch]++;
}
int l=0,r=0;
while(r<s2.size())//模拟窗口滑动
{
mp2[s2[r++]]++;//右侧对应的项出现的次数加一,往右滑动一个单位
if(r-l>s1.size()) mp2[s2[l++]]--;//如果超过s1的长度,最左侧的标记往右移动一个单位,并且对应项的次数减一
if(mp1==mp2) return true;
}
return false;
}
};