两个全都由小写字母组成的字符串 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 "); else printf("NO "); return 0; }