子串保证的大小肯定一致,只是内容会不同,那么可以用哈希存储s1,用步长为s1.length()的窗口滑动s2,如果两个哈希相等,就是满足条件。
这个哈希不能用unordered_map因为为0就删除,不等于0–,等于0就创建,不等于0就++,这个操作对于C++的unordered_map太困难了,反正也说了都是小写字母,就用长度为26的数组表示。
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
示例 1:
输入:s1 = “ab” s2 = “eidbaooo”
输出:true
解释:s2 包含 s1 的排列之一 (“ba”).
示例 2:
输入:s1= “ab” s2 = “eidboaoo”
输出:false
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/permutation-in-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
bool checkInclusion(string s1, string s2) {
if(s1.length()>s2.length())
return false;
vectorcharmap(26,0);
for(auto val : s1)
++charmap[val-'a'];
vectorcharmap_new(26,0);
int left = 0,right = s1.length()-1;
for(int i=left;i<=right;++i)
charmap_new[s2[i]-'a']++;
if(charmap==charmap_new)
return true;
while(right+1