您的位置:首页 > 编程语言 > PHP开发

POJ 1936(字符串匹配) 解题报告

2011-04-04 11:28 447 查看
/*_______________________________________________POJ 1936题___________________________________________________________
All in All
Time Limit: 1000MS  Memory Limit: 30000K
Total Submissions: 18702  Accepted: 7442

Description:
You have devised a new encryption technique which encodes a message by inserting between its characters randomly
generated strings in a clever way. Because of pending patent issues we will not discuss in detail how the strings
are generated and inserted into the original message. To validate your method, however, it is necessary to write
a program that checks if the message is really encoded in the final string.

Given two strings s and t, you have to decide whether s is a subsequence of t, i.e. if you can remove characters
from t such that the concatenation of the remaining characters is s.

Input:
The input contains several testcases. Each is specified by two strings s, t of alphanumeric ASCII characters
separated by whitespace.The length of s and t will no more than 100000.

Output:
For each test case output "Yes", if s is a subsequence of t,otherwise output "No".

Sample Input

sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter

Sample Output

Yes
No
Yes
No
__________________________________________________________________________________________________________________*/
#include<stdio.h>
#include<string.h>

int main()
{
int i,j,m,n;
char s[100000]={'/0'}, t[100000]={'/0'};
//	FILE *fin=fopen("input.txt","r");
while( scanf("%s%s",s,t)==2 )
{
m=strlen(s); //注:一定要提前计算好长度,不要每次循环判断条件中都临时计算长度,太费时间
n=strlen(t);
if(m>n)
{
printf("No/n");
continue;
}
for(i=0,j=0; i<m && j<n ;)
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
j++;
}
}
if(j=n && i<m ) //t串扫描完而s串还没扫完
printf("No/n");
else
printf("Yes/n");
}
return 0;
}

//(1)测试例 “aa a”提醒我应该先比较s t 的长度
//(2)第一版因为将strlen(s)写到了循环判断条件里,导致超时
//(3)竟然将Yes No写成YES NO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息