ZOJ顺利AC,POJ TLE 看讨论版,不要把strlen()写入循环中 = = 改了后 顺利AC。 好吧 我记住了 = =。。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #define MAX 100000 using namespace std; int main() { char in[MAX],all[MAX]; int flag,i; int aa = 0; while( scanf("%s %s",in,all)!= EOF ) { int ind = 0; int len = strlen(in); int len1 = strlen(all); for(i=0; i<len; i++) { flag = 0; for(int j=ind; !flag && j<len1; j++) { if( in[i] == all[j] ) { flag = 1; ind = j; ind++; } } if( flag == 0 ) break; } if( i == strlen(in) && flag ) printf("Yes/n"); else printf("No/n"); } return 0; } 另附简单版 = = 讨论版里的代码 #include<stdio.h> #include<string.h> int main() {char a[100002],b[100002]; int i,j; while(scanf("%s %s",a,b)!=EOF) {i=0,j=0; for(;j<strlen(b);j++)//关键步骤,只判定b数组是否到头,复杂度o(n), { if(a[i]==b[j]) i++; } if(i==strlen(a))printf("Yes/n"); else printf("No/n"); } return 0; }