Codeforces Round #704 (Div. 2) C. Maximum width(思维+DP)

Codeforces Round #704 (Div. 2) C. Maximum width(思维+DP) 

Codeforces Round #704 (Div. 2) C. Maximum width(思维+DP) 

给出两个字符串 s 和 t,s 中一定有一个子序列可以构成 t,假设构成 t 的子序列的下标为 Codeforces Round #704 (Div. 2) C. Maximum width(思维+DP),求 Codeforces Round #704 (Div. 2) C. Maximum width(思维+DP)

对于 t 的每一个字符,都可以找到 s 中最大匹配的位置和最小匹配的位置,找到之后两相邻字符之间的最大距离即为答案 

const int N=5e5+5;

    int n,m;
    int i,j,k;
    char s[N],t[N];
    int l[N],r[N];

int main()
{
	while(~sdd(n,m)){
		ss(s+1); ss(t+1);
		if(n==m) pd(1);
		else{
			int j=1;
			for(int i=1;i<=m;i++){
				while(j<=n){
					if(t[i]==s[j]){
						l[i]=j++;
						break;
					}
					j++;
				}
			}
			j=n;
			for(int i=m;i;i--){
				while(j>=1){
					if(t[i]==s[j]){
						r[i]=j--;
						break;
					}
					j--;
				}
			}
			int ans=0;
			for(int i=1;i<m;i++) ans=max(ans,r[i+1]-l[i]);
			pd(ans);
		}
	}
	return 0;
}

 

上一篇:监控最佳实践--redis及业务接口


下一篇:C - Maximum GCD