比赛描述
妹子:说你爱我!
贲神:不说!
妹子:快说你爱我!
贲神:不说!
…………
妹子:你快说嘛!
贲神:好吧好吧。watashilostvectoryou
贲神真的说了呦,不过妹子觉得很不爽,所以她想吧句子里面包含“love”的最短的字符串找出来(如果有多个的话找出最左边的),你能帮帮她么?
输入
第一行为一个正整数T表示有T组数据
每组数据有一行,为一个小写字母组成的字符串,长度不超过10000
输出
若可以找到“love”,则输出"l"最早出现的位置(默认第一个字符的位置为1),若找不到,则输出-1.
样例输入
1
watashilostvectoryou
样例输出
8
题目来源
张飞
/* Wrong Answer at Test 1 #include<iostream> int main(){ char a[10001]; int t,i,j,strLen,pos,minLen=INT_MAX; bool flagO,flagV,flagE; scanf("%d",&t); while(t--){ scanf("%s",a); } strLen = (int)strlen(a); for(i=0;i<strLen;i++){ if(a[i]=='l'){ flagO = flagV = flagE = 0; for(j=i+1; !flagE && j<strLen; j++){ switch(a[j]){ case('l'): break; case('o'): flagO = 1; break; case('v'): if(flagO){ flagV = 1; } break; case('e'): if(flagV){ flagE = 1; } break; default: break; } } if(flagE && minLen>j-i+1){ minLen = j-i+1; pos = i+1; } } } if(minLen!=INT_MAX){ printf("%d\n",pos); }else{ printf("-1"); } } */ /* 31MS #include<iostream> int main(){ char a[10001]; int t,i,j,strLen,pos,minLen; bool flagO,flagV,flagE; scanf("%d",&t); while(t--){ scanf("%s",a); minLen=INT_MAX; strLen = (int)strlen(a); for(i=0;i<strLen;i++){ if(a[i]=='l'){ flagO = flagV = flagE = 0; for(j=i+1; !flagE && j<strLen; j++){ switch(a[j]){ case('l'): break; case('o'): flagO = 1; break; case('v'): if(flagO){ flagV = 1; } break; case('e'): if(flagV){ flagE = 1; } break; default: break; } } if(flagE && minLen>j-i+1){ minLen = j-i+1; pos = i+1; } } } if(minLen!=INT_MAX){ printf("%d\n",pos); }else{ printf("-1\n"); } } } */ #include<iostream> int main(){ char a[10001]; int t,i,j,strLen,pos,minLen; bool flagO,flagV,flagE; scanf("%d",&t); while(t--){ scanf("%s",a); minLen=INT_MAX; strLen = (int)strlen(a); for(i=0;i<strLen;i++){ if(a[i]=='l'){ flagO = flagV = flagE = 0; for(j=i+1; !flagE && j<strLen; j++){ switch(a[j]){ case('l'): if(!flagO){ //这个剪枝将时间从31MS 降到了 0MS i = j; } break; case('o'): flagO = 1; break; case('v'): if(flagO){ flagV = 1; } break; case('e'): if(flagV){ flagE = 1; } break; default: break; } } if(flagE && minLen>j-i+1){ minLen = j-i+1; pos = i+1; } } } if(minLen!=INT_MAX){ printf("%d\n",pos); }else{ printf("-1\n"); } } }