File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ bool check(vector<int>& v1, vector<int>& v2) {
4+ // Compare the two frequency arrays
5+ for (int i = 0; i < 26; i++) {
6+ if (v1[i] != v2[i]) {
7+ return false;
8+ }
9+ }
10+ return true;
11+ }
12+
13+ bool checkInclusion(string s1, string s2) {
14+ // If s1 is longer than s2, it can't be a substring
15+ if (s1.size() > s2.size()) {
16+ return false;
17+ }
18+
19+ // Frequency count of characters in s1 and initial window of s2
20+ vector<int> cs1(26, 0);
21+ vector<int> cs2(26, 0);
22+ int n1 = s1.size();
23+ int n2 = s2.size();
24+
25+ // Count frequencies in s1 and first window of s2
26+ for (int i = 0; i < n1; i++) {
27+ cs1[s1[i] - 'a']++;
28+ cs2[s2[i] - 'a']++;
29+ }
30+
31+ // Check if the first window is a valid permutation
32+ if (check(cs1, cs2)) {
33+ return true;
34+ }
35+
36+ // Sliding window over s2
37+ for (int i = n1; i < n2; i++) {
38+ // Remove the character that goes out of the window
39+ cs2[s2[i - n1] - 'a']--;
40+ // Add the character that enters the window
41+ cs2[s2[i] - 'a']++;
42+
43+ // Check if the current window is a valid permutation
44+ if (check(cs1, cs2)) {
45+ return true;
46+ }
47+ }
48+
49+ // No valid permutation found
50+ return false;
51+ }
52+ };
You can’t perform that action at this time.
0 commit comments