判斷一個字符串是否包含另一個字符串全排列


兩個全都由小寫字母組成的字符串 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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM