南邮 OJ 1916 贲神的故事2

贲神的故事2

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 42            测试通过 : 12 

比赛描述

妹子:说你爱我!

贲神:不说!

妹子:快说你爱我!

贲神:不说!

…………

妹子:你快说嘛!

贲神:好吧好吧。watashilostvectoryou

贲神真的说了呦,不过妹子觉得很不爽,所以她想把句子里面包含“love”的最短的字符串找出来(如果有多个的话找出最左边的),你能帮帮她么?



输入

第一行为一个正整数T表示有T组数据

每组数据有一行,为一个小写字母组成的字符串,长度不超过10000

输出

若可以找到“love”,则输出l最早出现的位置(默认第一个字符的位置为1),若找不到,则输出-1.

样例输入

1
watashilostvectoryou

样例输出

8

提示

 

题目来源

张飞





#include<stdio.h>
int main(){
	int i,j,T,state,len,minLen,lPos;
	char *p,c[10001];
	scanf("%d",&T);
	while(T--){
		scanf("%s",c);
		minLen = 10001;
		lPos = -1;
		for(i=0;c[i];i++){
			if('l'==c[i]){
				state = 0;
				for(j=i+1;c[j];j++){
					if('l'==c[j] && 0==state){	//这是一个很好的剪枝
						i = j;
					}
					if('o'==c[j] && 0==state){
						state = 1;
					}
					if('v'==c[j] && 1==state){
						state = 2;
					}
					if('e'==c[j] && 2==state){
						len = j-i+1;
						if(minLen>len){
							minLen = len;
							lPos = i;
						}
						break;
					}
				}
			}
		}
		if(lPos!=-1){
			printf("%d\n",lPos+1);
		}else{
			printf("-1\n");
		}
	}
}



你可能感兴趣的:(ACM,南邮OJ,贲神的故事2)