UVALive 6320

.............先让我哭一会.......

因为样例三.... 没敢敲...然后确实是样例错了...然后...上次比赛刚做过的一道类似的题...URAL 1941...大水题啊......悔青了....哭瞎了...比赛不只是智力和实力的比拼啊......aaa...

同样的给你两个字符串.问你第二个是不是第一个字串.所谓字串,这里是说字母个数完全相同两部分就可以了。

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;

char str1[100010], str2[100010];
int num[100010], num2[100010];

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        memset(num2, 0, sizeof(num2));
        memset(num, 0, sizeof(num));
        cin >> str1;
        int len = strlen(str1);
        for (int i=0; i<len; ++i)
        {
            num[i] = str1[i] - 'a';
        }
        cin >> str2;
        int len2 = strlen(str2);
        for (int i=0; i<len2; ++i)
        {
            int temp = str2[i] - 'a';
            num2[temp]++;
        }
        int st = 0;
        bool flag = false;
        for (int i=0; i<len; ++i)
        {
            num2[num[i]]--;
            while(num2[num[i]] < 0)
            {
                num2[num[st]]++;
                st++;
            }
            if (i-st+1 == len2)
            {
                flag = true;
                break;
            }
        }
        if (flag)
            cout << "YES
";
        else cout << "NO
";
    }
    returl 0;
}
LOoK
原文地址:https://www.cnblogs.com/icode-girl/p/4695511.html