NC214625. 寻找相同子序列
描述
输入描述
第一行一个正整数T表示测试数据组数(1≤T≤103)。
接下来每一组包含两行第一行输入一个字符串(字符串长度为n,1<=n<=10000)第二行输入L,K,L为子串左端下标,K为子串长度(1<=L<=n,L+k<=n)
输出描述
输出T行,每行输出YES或NO,表示答案。
示例1
输入:
3 10010010 4 2 001001010 6 3 0110000000 2 2
输出:
YES NO NO
C(clang11) 解法, 执行用时: 7ms, 内存消耗: 376K, 提交时间: 2021-03-13 23:08:49
#include<stdio.h> #include<string.h> int main() { int t,n,l,k,i,j,m; scanf("%d",&t); while(t--) { m=0; char a[10005],b[10005]; scanf("%s",a); scanf("%d%d",&l,&k); n=strlen(a); for(i=l-1,j=0;i<l+k-1;i++,j++) { b[j]=a[i]; } b[j]='\0'; for(i=0;i<l-1;i++) { if(a[i]==b[0]) { m=1; break; } } for(i=l+k-1;i<n;i++) { if(a[i]==b[k-1]) { m++; break; } } if(m==1||m==2) printf("YES\n"); else printf("NO\n"); } return 0; }
C++(clang++11) 解法, 执行用时: 6ms, 内存消耗: 496K, 提交时间: 2021-03-30 20:37:32
#include <iostream> #include <string.h> using namespace std; int main() { char a[100000]; int i, j=0, k,l,n,p,t,b; cin >> t; for (b = 0; b <t; b++) { p = 0; cin >> a; cin >> l >> k; n = strlen(a); for (i = 0; i < l - 1; i++) { if (a[i] == a[l - 1])p = 1; } for (j = n - 1; j > l + k - 2; j--) { if (a[j] == a[l + k - 2])p = 1; } if (p == 1)cout << "YES"<<endl; else cout << "NO"<<endl; } return 0; }