时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 204800KB;其他语言 729088KB 题目描述: 给定一些字符串,请写一个算法,从中搜索出包含您输入的字符序列的那些字符串,按匹配度的高低排序输出。没有任何一个字符串匹配上,输出-1。 字符串源source 如下: \\\\\\\\\\\ 若输入查找的有序字符序列为\,则运算结果如下(请注意结果的排序规则)。 ABC (匹配 ABC)(完全匹配上,匹配度最大) ABCD (匹配 ABC.) ABDC (匹配 AB.C) ABDCF (匹配 AB.C.) ABDFCG (匹配 AB..C.) ABDFGC (匹配 AB...C) ADBCF (匹配 A.BC.) GABCEFG(匹配 .ABC...) 输入 您需要查找的字符串 样例输入 刺猬实习ABC
刺猬实习 所以其实就是暴力的去匹配resources,然后转成01串,排序输出就ok~ 见代码~~ #include
struct node{ int a; string b; };
vector < string > res; vector < node > v;
bool cmp( const node &v1, const node &v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致 {
return v1.b > v2.b;//升序排列 }
/*请完成下面这个函数,实现题目要求的功能*/
/*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ */
/******************************开始写代码******************************/ void doFilter(string a) {
int length=a.length(); for(int i=0;i int k=0; string b=res[i]; int len=b.length(); string ans=\ int f=0; for(int j=0;j if(b[j]==a[k]) { ans=ans+\ k++; } else { 刺猬实习 ans=ans+\ } if(k==length) { f=1; for(int t=j+1;t ans=ans+\ } break; } } if(f==0) { continue; } int si=ans.length(); for(int j=si;j<=8;j++) { ans=ans+\ } node tt; tt.a=i; tt.b=ans; v.push_back(tt); } if(v.size()==0) { cout<<-1< sort(v.begin(),v.end(),cmp); for(int i=0;i int k=v[i].a; cout< /******************************结束写代码******************************/ int main() { res.push_back(\ 刺猬实习 res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ res.push_back(\ string a; cin>>a; doFilter(a); return 0; } 刺猬实习