Description
Solution
双指针 + check(), 复杂度
O
(
32
∗
N
)
O(32*N)
O(32∗N)
Code
class Solution {
public:
inline bool check(int *sum) {
for(int i = 0;i < 26;++i) {
if(sum[i] != 0) return false;
}return true;
}
bool checkInclusion(string s1, string s2) {
int sz1 = s1.size(), sz2 = s2.size();
int sum[27] = {0};for(int i = 0;i < 26;++i) sum[i] = 0;
for(int i = 0;i < sz1;++i) ++sum[(int)(s1[i] - 'a')];
int i = 0, j = 0;
bool flag = false;
sum[s2[i]-'a']--;
while(i < sz2) {
while(j + 1 < sz2) {
int ch = s2[j+1] - 'a';
if(sum[ch]>0) {
j++,sum[ch]--;
} else break;
}
if(check(sum)) {flag = true;break;}
++sum[s2[i]-'a'];
i++;
}return flag;
}
};