leetcode力扣刷题打卡
题目:567. 字符串的排列
描述:给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
思路:
1、看见这种字符串问题就要想到哈希数组,v[26]存放每个字母出现的次数,然后判断两个数组是否相等。
原代码##
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int n1 = s1.size(), n2 = s2.size();
if (n1 > n2) return false;
vector<int> vs1(26, 0), vs2(26, 0);
for (int i = 0; i < n1; ++i) {
vs1[s1[i] - 'a']++;
vs2[s2[i] - 'a']++;
}
if (vs1 == vs2) return true;
for (int i = 0; i < n2 - n1; ++i) {
vs2[s2[i] - 'a']--;
vs2[s2[i + n1] - 'a']++;
if (vs2 == vs1) return true;
}
return false;
}
};