判断一个字符串是否包含另一个字符串全排列

两个全都由小写字母组成的字符串 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;
}

  

posted @ 2020-07-10 10:42  丧心病狂工科女  阅读(876)  评论(0编辑  收藏  举报