Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise.
In other words, return true if one of s1's permutations is the substring of s2.
Example 1:
Input: s1 = "ab", s2 = "eidbaooo"
Output: true
Explanation: s2 contains one permutation of s1 ("ba").
Example 2:
Input: s1 = "ab", s2 = "eidboaoo" Output: false
Constraints:
1 <= s1.length, s2.length <= 104s1ands2consist of lowercase English letters.
class Solution {
public:
bool checkInclusion(string s1, string s2) {
if (s1.size() > s2.size()) return false;
vector<int> c1(26),c2(26);
for (int i=0;i<s1.size();i++){
++c1[s1[i]-'a'];
++c2[s2[i]-'a'];
}
for (int i=s1.size(),j=s1.size(); i<s2.size();i++){
if (c1==c2) return true;
--c2[s2[i-j]-'a'];
++c2[s2[i]-'a'];
}
return c1==c2;
}
};
该博客讨论了如何使用C++解决LeetCode上的567题,即判断一个字符串是否包含另一个字符串的排列作为子串。通过分析字符串的字符出现频率,可以有效地进行判断。
396

被折叠的 条评论
为什么被折叠?



