判断一个字符串是否包含另一个字符串全排列
两个全都由小写字母组成的字符串 s 和 t 判断 s 是不是包含 t 的全排列
#include <bits/stdc++.h>
using namespace std;
string s, t;
int cnts[30], cntt[30];
bool check(string s1, string s2) {
int lent = s1.length(), lens = s2.length();
memset(cnts, 0, sizeof(cnts));
memset(cntt, 0, sizeof(cntt));
for(int i = 0; i < lent; i ++) cntt[s1[i] - 'a'] ++;
for(int i = 0; i < lens; i ++) {
cnts[s2[i] - 'a'] ++;
if(i >= lent - 1) {
bool flag = true;
for(int j = 0; j < 26; j ++) {
if(cnts[j] != cntt[j]) {
flag = false;
break;
}
}
if(flag) return true;
cnts[s2[i - lent + 1] - 'a'] --;
}
}
return false;
}
int main() {
cin >>s >> t;
if(check(t, s)) printf("YES\n");
else printf("NO\n");
return 0;
}

浙公网安备 33010602011771号