d题求助

#include<bits/stdc++.h>
using namespace std;
int n,m,t,num[26][1000001];
int main()
{
    cin>>t;
    while(t--)
    {
        scanf("%d%d",&n,&m);
        string s1,s2;
        cin>>s1>>s2;
        int k=1;
        for(int j=0;j<n;j++)
        {
            if(s2[0]==s1[j]) num[0][k++]=j+1;
        }
        for(int i=1;i<m;i++)
        {
            k=1;
            for(int j=0;j<n;j++)
            {
                if(s2[i]==s1[j]&&num[i-1][k]&&num[i-1][k]<j+1)
                    num[i][k++]=j+1;
            }
        }
        printf("%d\n",k-1);
    }
    return 0;
}

wa。。。
全部评论
维护方案:对于序列s1第i个字符,从后往前遍历s2序列,寻找是否存在与s1[i]相同的字符。如果有,那么检查是否在此之前这个字符串已经满足了前置条件,满足则进位,结束寻找。
点赞
送花
回复
分享
发布于 2022-02-25 23:33

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务