Posted onEdited onInLeetCodeDisqus: Symbols count in article: 2.8kReading time ≈3 mins.
sliding window O(n) time O(1) space 维护定长sliding window和一个cnt,cnt表示当前sliding window内符合要求的字符的个数,只有当cnt为m即sliding window的长度时,说明所有字符都是符合要求的,则找到了一个permutation
classSolution { public: boolcheckInclusion(string s1, string s2){ int m = size(s1), n = size(s2); if (m > n) returnfalse; int f[26] = {0}; for (char c : s1) { ++f[c - 'a']; } for (int cnt = 0, i = 0; i < n; ++i) { if (--f[s2[i] - 'a'] >= 0) { ++cnt; } if (i >= m && ++f[s2[i - m] - 'a'] > 0) { --cnt; } if (cnt == m) returntrue; } returnfalse; } };
classSolution { public: boolcheckInclusion(string s1, string s2){ int m = size(s1), n = size(s2); if (m > n) returnfalse; int f[26] = {0}; for (char c : s1) { ++f[c - 'a']; } for (int cnt = m, i = 0; i < n; ++i) { if (--f[s2[i] - 'a'] >= 0) { --cnt; } if (i >= m && ++f[s2[i - m] - 'a'] > 0) { ++cnt; } if (cnt == 0) returntrue; } returnfalse; } };
classSolution { public: boolcheckInclusion(string s1, string s2){ vector<int> m1(26); for (char c : s1) { ++m1[c - 'a']; } vector<int> m2(26); int m = s1.length(), n = s2.length(); for (int i = 0; i < n; ++i) { ++m2[s2[i] - 'a']; if (i >= m - 1) { if (m1 == m2) returntrue; --m2[s2[i - m + 1] - 'a']; } } returnfalse; } };
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution { public: boolcheckInclusion(string s1, string s2){ vector<int> m1(26); for (char c : s1) { ++m1[c - 'a']; } vector<int> m2(26); int m = s1.length(), n = s2.length(); for (int i = 0; i < n; ++i) { if (i >= m) { --m2[s2[i - m] - 'a']; } ++m2[s2[i] - 'a']; if (m1 == m2) returntrue; } returnfalse; } };